在C#我会去:
string UserName;
string Password;
Run Code Online (Sandbox Code Playgroud)
但现在,在Python中:
class User:
UserName
Password
Run Code Online (Sandbox Code Playgroud)
我收到一个UserName未定义的错误.没有变量我可以声明变量吗?
Tri*_*ych 60
在Python和许多其他语言中,有一个值意味着"没有价值".在Python中,该值是None.所以你可以这样做:
class User:
UserName = None
PassWord = None
Run Code Online (Sandbox Code Playgroud)
那些肯定听起来像实例变量,而不是类变量,所以也许这样做:
class User(object):
def __init__(self):
self.UserName = None
self.PassWord = None
Run Code Online (Sandbox Code Playgroud)
请注意Python如何None隐式地不时地分配值:
def f():
pass
g = f() # g now has the value of None
Run Code Online (Sandbox Code Playgroud)
dan*_*ben 12
首先,你应该像这样重写:
class User(object):
def __init__(self, username, password):
self.username = username
self.password = password
Run Code Online (Sandbox Code Playgroud)
这样,用户名和密码是实例变量而不是类变量(在您的示例中,它们是类变量 - 所有实例变量都需要__init__作为属性定义self).然后,您可以User使用您想要的任何用户名和密码初始化a ,包括None您是否真的希望它们没有价值.
在你的代码中:
class User:
UserName
Password
Run Code Online (Sandbox Code Playgroud)
UserName并被Password解析为表达式.由于此时尚未分配,因此您获得了NameError.
在Python中,必须先使用赋值语句定义变量,然后才能在表达式中使用它,否则会得到NameError.请注意,"之前"在这里表示"执行顺序",而不是"源代码顺序".还有一点(导入语句,全局变量,命名空间黑客),但让我们在这里保持简单.
定义变量"没有值"的惯用方法是为其赋值None.
此外,您的代码看起来确实需要实例成员,而不是类成员.正如一些静态分析工具所认识到的那样,惯用的方法pylint是:
class User(object):
def __init__(self):
self.username = None
self.password = None
Run Code Online (Sandbox Code Playgroud)
此外,从"对象"派生所有类是很好的Python样式,因此您使用新样式类,并使用lowercase_with_underscore或initialLowerWithCaps约定命名实例变量.InitialCaps样式非常普遍地保留给类名.