zoukankan      html  css  js  c++  java
  • 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和赋值是两种完全不同的操作。实例无法修改类变量的指向,但可以修改类变量指向的内容,注意修改类变量的指向和修改类变量指向的内容是不同的概念。

  • 相关阅读:
    052-PHP输出多个参数
    045-利用反射机制,简单的实现PHP插件模式
    044-PHP获得多个类对应的反射信息
    043-PHP简单获得一个类对应的反射信息
    042-PHP使用闭包函数递归无限级分类
    040-PHP使用闭包函数来进行父实例的变量自增,正确示例
    039-PHP使用闭包函数来进行父实例的变量自增,错误示例
    038-PHP向返回的闭包函数实例中,传递外部变量参数
    python——基本数据类型1——简介
    java知识整理
  • 原文地址:https://www.cnblogs.com/lover995/p/12266438.html
Copyright © 2011-2022 走看看