博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中super与成员属性
阅读量:7118 次
发布时间:2019-06-28

本文共 1511 字,大约阅读时间需要 5 分钟。

super的使用 直接看例子:
class A():    def __init__(self, a):        print('init A...')        self.a = aclass B(A):    def __init__(self, a):        super(B, self).__init__(a)        print('init B...')class C(A):    def __init__(self, a):        super(C, self).__init__(a)        print('init C...')class D(B, C):    def __init__(self, a):        super(D, self).__init__(a)        print('init D...')                d = D('2')print(D.__mro__)

结果为:

init A...init C...init B...init D...(
,
,
,
,
)

结论:

从运行结果上看,super继承和普通继承(普通继承只找父类)是不一样的。原因为它们的内部运行机制不一样,这一点在多重继承时体现得很明显。在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(E.__mro__)。

注意:super继承只能用于新式类,用于经典类时就会报错。
新式类:必须有继承的类,如果没什么想继承的,那就继承object
经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj』

更详细的参考

总结

  1. super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,
       产生了一个super对象;
  2. super类的初始化函数并没有做什么特殊的操作,只是简单记录了类类型和具体实例;
  3. super(B, self).func的调用并不是用于调用当前类的父类的func函数;
  4. Python的多继承类是通过mro的方式来保证各个父类的函数被逐一调用,而且保证每个父类函数
       只调用一次(如果每个类都使用super);
  5. 混用super类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一
       个父类函数被调用多次。

super一般用于初始化__Init__()函数。将子类和所有的父类用super关联。

 

类成员方法改为‘值’

class Foo:

    def f1(self):

        return 123

    def f2(self,v):

        print(v)
    def f3(self):
        print('del')

    per = property(fget=f1,fset=f2,fdel=f3,doc='property操作')

obj = Foo()
ret = obj.per
print(ret)

obj.per = 123456

del obj.per

执行结果:

123

123456
del

 

转载于:https://www.cnblogs.com/MY0213/p/7821897.html

你可能感兴趣的文章
css几个居中的方法
查看>>
程序员如何从0到1搭建自己的技术博客
查看>>
【Spring Boot 实战】数据库千万级分库分表和读写分离实战
查看>>
势高,则围广:TiDB 的架构演进哲学
查看>>
移动浏览器的四大内核
查看>>
springmvc+mybatis+dubbo+zookeeper分布式架构
查看>>
jenkins自动化部署
查看>>
史蒂芬.霍金:警惕政府“人工智能军备竞赛”
查看>>
webpack的分享
查看>>
立足共赢 | 开宸引领绿色会展经济新形式
查看>>
宝可梦推出「电子鸡」新游戏 训练师赶紧将可爱伊布带回家!
查看>>
进程和线程
查看>>
灵机一动之优雅实现用例顺序插入
查看>>
一步一步实现iOS QQ第三方登录
查看>>
机器学习者都应该知道的五种损失函数!
查看>>
Python爬虫 --- 2.2 Scrapy 选择器的介绍
查看>>
JS设计模式初识(四)-迭代器模式
查看>>
详解promise、async和await的执行顺序
查看>>
Windows多屏开发小记
查看>>
区块链开发中的9大应用场景
查看>>