Python类中的属性初始化/声明:放置它们的位置?

时间:2011-10-18 15:01:54

标签: python coding-style attributes

我想知道在Python的体内或__init__函数内初始化对象属性的最佳做法是什么?

class A(object):
    foo = None

VS

class A(object):
   def __init__(self):
       self.foo = None

2 个答案:

答案 0 :(得分:54)

如果您希望该类的所有实例共享该属性,请使用class属性:

class A(object):
    foo = None

这会导致('foo',None)成为(key,value)中的A.__dict__对。

如果要基于每个实例自定义属性,请使用实例属性:

class A(object):
   def __init__(self):
       self.foo = None

这会导致('foo',None)成为(key,value)中的a.__dict__对,其中a=A()A的实例。

答案 1 :(得分:2)

类定义中定义的属性被视为类变量(如Java中的静态变量),而初始化程序中设置的属性是实例属性(请注意self.something = 1something = 1之间的差异)。有关详细信息,请参阅this question,有关更多详情,请参阅this one。这两种情况之间没有太大的实际区别,因为类级别定义为属性提供了默认值,但是如果要在使用对象实例之前使用某种逻辑来设置属性,则应该在__init__()方法。