Python 类中属性的初始化/声明:应该放在哪里?

57 投票
2 回答
32414 浏览
提问于 2025-04-17 04:33

我在想,在Python中初始化对象属性的最佳做法是什么,是在类的主体部分,还是在__init__函数里面?

也就是说:

class A(object):
    foo = None

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

2 个回答

4

在类定义中定义的属性被称为类变量(就像Java中的静态变量),而在初始化器中设置的属性则是实例属性(注意self.something = 1something = 1之间的区别)。想了解更多细节,可以查看这个问题,还有这个问题提供了更多信息。这两种情况之间没有太大的实际区别,因为类级别的定义给属性提供了一个默认值,但如果你想在使用对象实例之前用某种逻辑来设置属性,最好是在__init__()方法中进行。

77

如果你想让这个属性在这个类的所有实例中都能共享,就要使用类属性:

class A(object):
    foo = None

这样会让 ('foo',None) 成为 A.__dict__ 中的一个 (key,value) 对。

如果你想让这个属性可以在每个实例中单独设置,就要使用实例属性:

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

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

撰写回答