我想知道在Python的体内或__init__
函数内初始化对象属性的最佳做法是什么?
即
class A(object):
foo = None
VS
class A(object):
def __init__(self):
self.foo = None
答案 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 = 1
和something = 1
之间的差异)。有关详细信息,请参阅this question,有关更多详情,请参阅this one。这两种情况之间没有太大的实际区别,因为类级别定义为属性提供了默认值,但是如果要在使用对象实例之前使用某种逻辑来设置属性,则应该在__init__()
方法。