В C# я пошел бы:
string UserName;
string Password;
Но теперь, в Python:
class User:
UserName
Password
Я получаю ошибку это UserName
не определяется. Разве я не могу объявить переменную без переменной?
В Python и многих других языках есть значение, которое означает «без значения». В Python эта ценность нет
. Таким образом, вы могли бы сделать что-то вроде этого:
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
Вы не можете. В Python "переменные" - это просто имена. Имя всегда указывает («связано») к объекту. Это соглашение о назначении имена, которые еще не имеют разумного значения, но должны присутствовать, на нет
.
Вы также можете быть заинтересованы в моей ответа здесь .
В вашем коде:
class User:
UserName
Password
имя пользователя
и пароль
анализируются как выражения. Поскольку они не были назначены в этот момент, вы получите NameError
.
В Python переменная должна быть определена с оператором назначения до того, как он может быть использован в выражении, в противном случае вы получаете NameError. Обратите внимание, что «раньше» здесь означает «Заказ исполнения», а не «Заказ исходного кода». Для этого есть немного больше (импортные операторы, глобалы, хаки пространства имен), но давайте удержим это простым здесь.
Идиоматический способ определить переменную «без значения» - это присвоение его значения
.
Кроме того, ваш код выглядит так, будто он действительно хочет, чтобы члены экземпляра, а не членов класса. Идиоматический способ сделать это, как признано некоторыми инструментами статического анализа, такой как Pylint
, является:
class User(object):
def __init__(self):
self.username = None
self.password = None
Кроме того, это хороший стиль Python, чтобы получить все классы из «объекта», поэтому вы используете New- Классы стиля и для имени экземпляра переменная с нижней частотой_With_underscore или EnationalLowerWithCaps. Стиль INatealCaps довольно универсально зарезервирован на имена классов.
Прежде всего, вы должны переписать так:
class User(object):
def __init__(self, username, password):
self.username = username
self.password = password
Таким образом, имя пользователя и пароль являются переменными экземпляра вместо переменных классов (в вашем примере, они являются переменными класса - все переменные экземпляра Необходимо определить в __ init __
в качестве свойств Self
). Затем вы можете инициализировать пользователя
с любым именем пользователя и паролем, в том числе NOT
, если вы действительно хотите, чтобы они не имели значения.