python编程学习进度五

下面是今日python编程学习总结:

1、super关键字产生的原因:在子类当中可以通过使用super关键字来调用父类的中相应的方法,简化代码。
使用super调用的所有属性,都是从MRO列表当前的位置往后找,千万不要通过看代码去找继承关系,一定要看MRO列表。
示例代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-

class Foo:
    def test(self):
        print("from foo")

class Bar(Foo):
    def test(self):
        #Foo.test(self)
        super().test()
        print("bar")

if __name__ == '__main__':
    bb = Bar()
    bb.test()
 

运行结果:

2,类变量的可变属性
(1)如果通过类的实例改变了变量,类变量也会发生改变,下面是例子

class Service(object):
    data = []
    def __init__(self, other_data):
        self.other_data = other_data
 

(2)在上面的代码中,在Service的命名空间中定义一个data,其初始值为空list,现在通过对象来改变它

s1 = Service(['a', 'b'])
s2 = Service(['c', 'd'])
s1.data.append(1)

s1.data
## [1]
s2.data
## [1]

s2.data.append(2)

s1.data
## [1, 2]
s2.data

(3)可以看到,如果属性是可变的,在对象中改变这个属性,将会影响到类的命名空间。
可以通过赋值防止对象改变类变量。

s1 = Service(['a', 'b'])
s2 = Service(['c', 'd'])
 
s1.data = [1]
s2.data = [2]
 
s1.data
## [1]
s2.data
## [2]
Service.data
[1,2]

在Service类里定义了一个类变量data,注意当我们执行s1.data.append(1)时,对这个类变量进行了修改,增加了一个1.而当我们执行s1.data = [1]时,我们并没有更改类变量data,而是给s1增加了一个变量data,原来的类变量不受影响,Service.data依旧是[1,2]。这一点要特别注意。append和赋值是两种完全不同的操作。实例无法修改类变量的指向,但可以修改类变量指向的内容,注意修改类变量的指向和修改类变量指向的内容是不同的概念。

原文地址:https://www.cnblogs.com/lover995/p/12266438.html