如何在Python中声明没有值的属性?

2024-03-28 12:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在C#我会去:

string UserName;
string Password;

但现在,在Python中:

class User:
    UserName
    Password

我收到一个未定义UserName的错误。我不能声明没有变量的变量吗?


Tags: 声明string错误usernamepasswordclass未定义我会
3条回答

在你的代码中:

class User:
    UserName
    Password

UserNamePassword被解析为表达式。因为此时还没有分配它们,所以会得到一个NameError

在Python中,必须使用赋值语句定义变量,然后才能在表达式中使用它,否则会得到NameError。注意,这里的“before”表示“execution order”,而不是“source code order”。还有更多的内容(import语句、globals、namespace hacks),但是让我们在这里保持简单。

定义变量“没有值”的惯用方法是给它赋值None

另外,代码看起来确实需要实例成员,而不是类成员。一些静态分析工具(如pylint)认可的惯用方法是:

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

另外,从“object”派生所有类也是一种很好的Python样式,因此您可以使用新样式的类,并使用小写字母_和_下划线或initialLowerWithCaps约定来命名实例变量。InitialCaps样式对类名是相当普遍的保留。

在Python和许多其他语言中,有一个值表示“无值”。在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,如果你真的想要它们没有值的话。

相关问题 更多 >