Python:类和实例属性之间的差异

问题:

有什么有意义的区别:

class A(object):
    foo = 5   # some default value

class B(object):
    def __init__(self, foo=5):
        self.foo = foo

如果您创建了很多实例,这两种风格的性能或空间需求是否有差异?当您阅读代码时,您是否考虑到两种风格的含义有显着差异?

回答:

除了性能考虑之外,还有一个显着的semantic差异。在类属性的情况下,只有一个对象被引用。在实例属性集实例化中,可以有多个对象引用。例如

>>> class A: foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]
>>> class A:
...  def __init__(self): self.foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo    
[]

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python: Difference between class and instance attributes

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 3