没错,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))