В С# я бы пошел:
string UserName;
string Password;
Но теперь, в Python:
class User:
UserName
Password
Я получаю сообщение об ошибке UserName
. Могу ли я объявить переменную без переменной?
В С# я бы пошел:
string UserName;
string Password;
Но теперь, в Python:
class User:
UserName
Password
Я получаю сообщение об ошибке UserName
. Могу ли я объявить переменную без переменной?
В 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
Прежде всего, вы должны переписать вот так:
class User(object):
def __init__(self, username, password):
self.username = username
self.password = password
Таким образом, имя пользователя и пароль являются переменными экземпляра вместо переменных класса (в вашем примере они являются переменными класса - все переменные экземпляра должны быть определены в __init__
как свойства self
). Затем вы можете инициализировать User
с помощью любого имени пользователя и пароля, включая None
, если вы действительно хотите, чтобы они не имели значения.
В вашем коде:
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 довольно универсален для имен классов.
Вы не можете. В Python "Переменные" - это просто имена. Имя всегда указывает ( "привязано" ) к объекту. Это соглашение назначает имена, которые еще не имеют разумного значения, но должны присутствовать, до None
.
Вы также можете быть заинтересованы в ответе здесь.
Просто присвойте значение None
:
self.username = None
Классы данных для Python 3. 7+:
@dataclass
class User:
UserName: str
Password: str