源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python3里的super()和__class__使用介绍

  • 时间:2020-08-06 02:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python3里的super()和__class__使用介绍
子类里访问父类的同名属性,而又不想直接引用父类的名字,因为说不定什么时候会去修改它,所以数据还是只保留一份的好。其实呢,还有更好的理由不去直接引用父类的名字,参见 [url=http://rhettinger.wordpress.com/2011/05/26/super-considered-super/]Python's super() considered super! | Deep Thoughts by Raymond Hettinger[/url]。 这时候就该 super() 登场啦——
[url=http://docs.python.org/3/reference/datamodel.html#creating-the-class-object]super 的实现[/url]是通过插入一个名为 __class__ 的名字来实现的(super 会从调用栈里去查找这个 __class__ 名字)。所以,就像文档里暗示的,其实可以直接在定义方法时访问 __class__ 名字,它总是该方法被定义的类。继续我们的单字母类:
[u]复制代码[/u] 代码如下:
class C(B):   def m(self):     print('C')     # see the difference!     print(__class__.__mro__)     print(self.__class__.__mro__)     __class__.__mro__[2].m(self) class D(C):   def m(self):     print('D')     super().m() o = D() o.m()
会得到:
[u]复制代码[/u] 代码如下:
D C (<class 't.C'>, <class 't.B'>, <class 't.A'>, <class 'object'>) (<class 't.D'>, <class 't.C'>, <class 't.B'>, <class 't.A'>, <class 'object'>) A
不过,PyPy 并不支持这个 __class__ 名字。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部