今天我在面试中被问到一个问题:“如果我们在课外定义实例变量,它会显示任何错误”。
class temp():
a=0
b=0
def __init__(self,*args):
temp.a = args[0]
temp.b = args[1]
if len(args)>2 and args[2]:
print 'extra',args[2]
def display(self):
print self.a,self.b,self.c
a = temp(4,9)
b = temp(5,3)
a.c = 20
a.display()
如果我运行上面的代码我得到c = 20的值。我来自c ++背景并认为这将是错误但不是......为什么它就像那样......为什么python允许在类外创建变量。< / p>
答案 0 :(得分:2)
我建议您阅读Classes and Namespaces上的Python文档。在Python中,实例只是另一种类型的命名空间,在类定义之外定义实例变量只不过是在定义实例的名称和值的字典中添加一个条目。将此与C对比,其中实例是根据类定义中列出的模式构造的实际内存块。一旦定义了类,就不能在事后插入属性。
答案 1 :(得分:0)
在您的情况下,a
是类temp
的实例。您可以向其添加任何属性。在源代码中,您可以自己检查它,它将通过简单的指针操作将此属性添加到此实例。
我认为这是动态语言的关键点,它与C ++完全不同。