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 = 1
和something = 1
之间的差异)。 看到这个问题的更多细节, 这一个甚至更多。 这两种情况之间没有很多实际的区别,因为类级定义给出了属性的默认值,但是如果你想在使用对象实例之前使用某种逻辑来设置属性,你应该在__init__()
方法。