Подтвердить что ты не робот

Как объявить атрибут в Python без значения?

В С# я бы пошел:

string UserName;
string Password;

Но теперь, в Python:

class User:
    UserName
    Password

Я получаю сообщение об ошибке UserName. Могу ли я объявить переменную без переменной?

4b9b3361

Ответ 1

В Python и многих других языках существует значение, которое означает "no value". В Python это значение None. Таким образом, вы можете сделать что-то вроде этого:

class User:
   UserName = None
   PassWord = None

Те уверены, что звучат как переменные экземпляра, но не переменные класса, поэтому, возможно, сделайте это:

class User(object):
    def __init__(self):
        self.UserName = None
        self.PassWord = None

Обратите внимание, как Python время от времени присваивает значение None неявно:

def f():
    pass
g = f() # g now has the value of None

Ответ 2

Прежде всего, вы должны переписать вот так:

class User(object):
  def __init__(self, username, password):
    self.username = username
    self.password = password

Таким образом, имя пользователя и пароль являются переменными экземпляра вместо переменных класса (в вашем примере они являются переменными класса - все переменные экземпляра должны быть определены в __init__ как свойства self). Затем вы можете инициализировать User с помощью любого имени пользователя и пароля, включая None, если вы действительно хотите, чтобы они не имели значения.

Ответ 3

В вашем коде:

class User:
    UserName
    Password

UserName и Password анализируются как выражения. Поскольку они не были назначены в этот момент, вы получите NameError.

В Python переменная должна быть определена с помощью инструкции присваивания, прежде чем ее можно будет использовать в выражении, иначе вы получите NameError. Обратите внимание, что "before" здесь означает "порядок выполнения", а не "порядок исходного кода". Там немного больше (операции импорта, глобалы, хакеры пространства имен), но пусть здесь все упрощается.

Идиоматический способ определить переменную "без значения" - это присвоить ей значение None.

Кроме того, ваш код выглядит так, будто ему действительно нужны члены экземпляра, а не члены класса. Идиоматический способ сделать это, как признают некоторые инструменты статического анализа, такие как pylint,:

class User(object):
    def __init__(self):
        self.username = None
        self.password = None

Кроме того, хороший стиль Python выводит все классы из "объекта", поэтому вы используете классы нового стиля и называете переменную экземпляра с нижестоящим_with_underscore или initialLowerWithCaps. Стиль InitialCaps довольно универсален для имен классов.

Ответ 4

Вы не можете. В Python "Переменные" - это просто имена. Имя всегда указывает ( "привязано" ) к объекту. Это соглашение назначает имена, которые еще не имеют разумного значения, но должны присутствовать, до None.

Вы также можете быть заинтересованы в ответе здесь.

Ответ 5

Просто присвойте значение None:

self.username = None