В вашем коде:
class User:
UserName
Password
UserName
и Password
анализируются как выражения. Поскольку они не были назначены на данный момент, вы получаете NameError
.
В Python переменная должна быть определена с помощью оператора присваивания, прежде чем ее можно будет использовать в выражении, в противном случае вы получите NameError. Обратите внимание, что здесь «до» означает «порядок выполнения», а не «порядок исходного кода». В этом есть кое-что еще (операторы импорта, глобальные переменные, хаки пространства имен), но давайте сделаем это просто.
Идиоматический способ определения переменной «без значения» состоит в присвоении ей значения None
.
Кроме того, ваш код выглядит так, будто ему действительно нужны члены экземпляра, а не члены класса. Идиоматический способ сделать это, как это признают некоторые инструменты статического анализа, такие как pylint
, таков:
class User(object):
def __init__(self):
self.username = None
self.password = None
Кроме того, это хороший стиль Python для получения всех классов от «объекта», поэтому вы используете классы нового стиля и присваиваете имя переменной экземпляра с использованием соглашения lowercase_with_underscore или initialLowerWithCaps. Стиль InitialCaps довольно универсально зарезервирован для имен классов.