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

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

 class A(object): foo = None 

VS

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

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

 class A(object): foo = None 

这导致('foo',None)成为A.__dict__一个(key,value)对。

如果您希望该属性可以按实例进行定制,请使用实例属性:

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

这导致('foo',None) a.__dict__a=A()一个(key,value)对,其中a=A()A一个实例。

在类定义中定义的属性被认为是类variables(类似于Java中的静态variables),而在初始化器中设置的属性是实例属性(注意self.something = 1something = 1之间的差异)。 看到这个问题的更多细节, 这一个甚至更多。 这两种情况之间没有很多实际的区别,因为类级定义给出了属性的默认值,但是如果你想在使用对象实例之前使用某种逻辑来设置属性,你应该在__init__()方法。