2024-03-28 12:48:15 发布
网友
在C#我会去:
string UserName; string Password;
但现在,在Python中:
class User: UserName Password
我收到一个未定义UserName的错误。我不能声明没有变量的变量吗?
UserName
在你的代码中:
UserName和Password被解析为表达式。因为此时还没有分配它们,所以会得到一个NameError。
Password
NameError
在Python中,必须使用赋值语句定义变量,然后才能在表达式中使用它,否则会得到NameError。注意,这里的“before”表示“execution order”,而不是“source code order”。还有更多的内容(import语句、globals、namespace hacks),但是让我们在这里保持简单。
定义变量“没有值”的惯用方法是给它赋值None。
None
另外,代码看起来确实需要实例成员,而不是类成员。一些静态分析工具(如pylint)认可的惯用方法是:
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
不过,这些确实听起来像实例变量,而不是类变量,所以可以这样做:
注意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,如果你真的想要它们没有值的话。
__init__
self
User
在你的代码中:
UserName
和Password
被解析为表达式。因为此时还没有分配它们,所以会得到一个NameError
。在Python中,必须使用赋值语句定义变量,然后才能在表达式中使用它,否则会得到NameError。注意,这里的“before”表示“execution order”,而不是“source code order”。还有更多的内容(import语句、globals、namespace hacks),但是让我们在这里保持简单。
定义变量“没有值”的惯用方法是给它赋值
None
。另外,代码看起来确实需要实例成员,而不是类成员。一些静态分析工具(如
pylint
)认可的惯用方法是:另外,从“object”派生所有类也是一种很好的Python样式,因此您可以使用新样式的类,并使用小写字母_和_下划线或initialLowerWithCaps约定来命名实例变量。InitialCaps样式对类名是相当普遍的保留。
在Python和许多其他语言中,有一个值表示“无值”。在Python中,这个值是
None
。所以你可以这样做:不过,这些确实听起来像实例变量,而不是类变量,所以可以这样做:
注意Python如何不时隐式地分配
None
值:首先,你应该这样重写:
这样,用户名和密码是实例变量而不是类变量(在您的示例中,它们是类变量——所有实例变量都需要在
__init__
中定义为self
的属性)。然后,你可以用你想要的用户名和密码初始化一个User
,包括None
,如果你真的想要它们没有值的话。相关问题 更多 >
编程相关推荐