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

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

string UserName;
string Password;

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

class User:
    UserName
    Password

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

34
задан Ioannis Filippidis 26 September 2017 в 08:41
поделиться

5 ответов

В 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
60
ответ дан 27 November 2019 в 16:16
поделиться

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

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

5
ответ дан 27 November 2019 в 16:16
поделиться

Просто назначить значение : :

Self.Username = Нет

2
ответ дан 27 November 2019 в 16:16
поделиться

В вашем коде:

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 довольно универсально зарезервирован на имена классов.

8
ответ дан 27 November 2019 в 16:16
поделиться

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

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

Таким образом, имя пользователя и пароль являются переменными экземпляра вместо переменных классов (в вашем примере, они являются переменными класса - все переменные экземпляра Необходимо определить в __ init __ в качестве свойств Self ). Затем вы можете инициализировать пользователя с любым именем пользователя и паролем, в том числе NOT , если вы действительно хотите, чтобы они не имели значения.

12
ответ дан 27 November 2019 в 16:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: