这困扰了我几个小时,因为我来自 C++ 世界。我终于发现了发生了什么,但我不知道为什么这是默认行为。我想了解为什么这种语言是这样设计的。
我想要一个实例变量mem
。所以我尝试了这个:
class x(object):
mem = []
obj = x()
obj.mem.append(1)
print(obj.mem)
objTWO = x()
objTWO.mem.append(2)
print(objTWO.mem)
打印这个:
[1]
[1, 2]
然而:
class x(object):
def __init__(self):
self.mem = []
obj = x()
obj.mem.append(1)
print(obj.mem)
objTWO = x()
objTWO.mem.append(2)
print(objTWO.mem)
印刷
[1]
[2]
为什么第一个是默认行为?这里的直觉是什么,因为它与许多主流 OO 语言的工作方式相反(它们引入了static
top case 的关键字,这让你明确地说你想要一个静态变量)?对于 Python 的新手来说,这是一个惊喜。
此外,您似乎可以拥有同名的实例变量和类变量:
class x(object):
mem = []
def __init__(self):
self.mem = []
我必须运行它来弄清楚要打印什么。我也猜不透!