python特性1:对象属性初始化在__init__方法中

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

You May Also Like

About the Author: daidai5771

发表评论

电子邮件地址不会被公开。 必填项已用*标注