没错,
somedata在类的所有实例及其子类之间共享,因为它是在类 定义 时创建的。线
somedata = {}somedata['was_false_in_base'] = False在定义类时即在解释器遇到
class语句时执行- 而不是
在创建实例时执行(请考虑Java中的静态初始化程序块)。如果类实例中不存在属性,则检查类对象的属性。
在类定义时,您可以运行任意代码,如下所示:
import sys class Test(object): if sys.platform == "linux2": def hello(self): print "Hello Linux" else: def hello(self): print "Hello ~Linux"
在Linux系统上,
Test().hello()将打印
Hello Linux,在所有其他系统上,将打印其他字符串。
相反,in
__init__的对象是在 实例化 时创建的,并且仅属于实例(将它们分配给时
self):
class Test(object): def __init__(self): self.inst_var = [1, 2, 3]
在许多情况下,在类对象而不是实例上定义的对象很有用。例如,您可能想要缓存类的实例,以便可以共享具有相同成员值的实例(假定它们是不可变的):
class SomeClass(object): __instances__ = {} def __new__(cls, v1, v2, v3): try: return cls.__insts__[(v1, v2, v3)] except KeyError: return cls.__insts__.setdefault( (v1, v2, v3), object.__new__(cls, v1, v2, v3))通常,我在类主体中将数据与元类或通用工厂方法结合使用。


![为什么属性引用在Python继承中表现得像这样?[重复] 为什么属性引用在Python继承中表现得像这样?[重复]](http://www.mshxw.com/aiimages/31/646658.png)
