class A(object):
i = 1
data = {'a':'a'}
def fun(self):
self.data['232'] = 3232
self.i = 3232
class B(A):
i = 2
data = {'b':'b'}
class C(A):
i = 3
data = {'c':'c'}
class D(B):
data = {}
c = B()
c.fun()
print (c.data, c.i)
d = B()
print (d.data, d.i)
如上代码,输出结果为:
{‘b’: ‘b’, ‘232’: 3232} 3232
{‘b’: ‘b’, ‘232’: 3232} 2
由此可见,python的类属性如果直接定义,而不是在__init__中,则复杂类型的数据在new新的对象时,会直接赋值之前的对象修改后的内容, 简单类型不会发生变化
class A(object):
i = 1
def __init__(self):
self.data = {'a':'a'}
def fun(self):
self.data['232'] = 3232
self.i = 3232
class B(A):
i = 2
def __init__(self):
self.data = {'b':'b'}
class C(A):
i = 3
def __init__(self):
self.data = {'c':'c'}
class D(B):
def __init__(self):
self.data = {}
c = B()
c.fun()
print (c.data, c.i)
d = B()
print (d.data, d.i)
修改为输出结果为:
{‘b’: ‘b’, ‘232’: 3232} 3232
{‘b’: ‘b’} 2