今天,我在接受采访时被问到一个问题:“如果我们在类之外定义实例变量,它会显示出任何错误”。
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++背景,认为这是错误,但是not...why就像not...why允许在类之外创建变量。
发布于 2015-08-29 01:10:23
我建议在类和命名空间上阅读Python。在Python中,实例只是另一种类型的命名空间,在类定义之外定义实例变量只需要在定义实例的名称和值字典中添加一个条目。将此与C进行对比,其中实例是根据类定义中布局的模式构造的实际内存块。一旦定义了类,就不能在事实之后插入属性。
发布于 2015-08-29 01:02:41
在您的例子中,a
是类temp
的一个实例。您可以向它添加任何属性。在源代码中,您可以自己检查它,它将通过简单的指针操作将这个属性添加到这个实例中。我认为这是动态语言的关键点,它与C++完全不同。
https://stackoverflow.com/questions/32284259
复制