• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python3里的super()和__class__使用介绍

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

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python3 super,python3 class,python3使用教程,python3 mysqldb使用,python3rpm包等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

子类里访问父类的同名属性,而又不想直接引用父类的名字,因为说不定什么时候会去修改它,所以数据还是只保留一份的好。其实呢,还有更好的理由不去直接引用父类的名字,参见 Python's super() considered super! | Deep Thoughts by Raymond Hettinger。

这时候就该 super() 登场啦——
class A:
  def m(self):
    print('A')

class B(A):
  def m(self):
    print('B')
    super().m()

B().m()
</div>
当然 Python 2 里 super() 是一定要参数的,所以得这么写:
class B(A):
  def m(self):
    print('B')
    super(B, self).m()
</div>
需要提到自己的名字。这个名字也是动态查找的,在这种情况下替换第三方库中的类会出问题。

super() 很好地解决了访问父类中的方法的问题。那么,如果要访问父类的父类(准确地说,是方法解析顺序(MRO)中位于第三的类)的属性呢?

比如,B 类是继承 A 的,它重写了 A 的 m 方法。现在我们需要一个 C 类,它需要 B 类的一些方法,但是不要 B 的 m 方法,而改用 A 的。怎么间接地引用到 A 的 m 方法呢?使用self.__class__肯定是不行的,因为 C 还可能被进一步继承。

从文档中我注意到,super 的实现是通过插入一个名为 __class__ 的名字来实现的(super 会从调用栈里去查找这个 __class__ 名字)。所以,就像文档里暗示的,其实可以直接在定义方法时访问 __class__ 名字,它总是该方法被定义的类。继续我们的单字母类:
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()
</div>
会得到:
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
</div>
不过,PyPy 并不支持这个 __class__ 名字。

</div>

您可能想查找下面的文章:

  • Python中super关键字用法实例分析
  • Python中super关键字用法实例分析
  • Python3里的super()和__class__使用介绍

相关文章

  • pycharm中连接mysql数据库的步骤详解
  • python的几种开发工具介绍
  • 对于Python的Django框架使用的一些实用建议
  • python定时检查启动某个exe程序适合检测exe是否挂了
  • Python实现快速排序算法及去重的快速排序的简单示例
  • Python中返回字典键的值的values()方法使用
  • python实现斐波那契递归函数的方法
  • python 截取 取出一部分的字符串方法
  • 在arcgis使用python脚本进行字段计算时是如何解决中文问题的
  • Python 提取dict转换为xml/json/table并输出的实现代码

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
    • Centos5.x下升级python到python2.7版本教程
    • python实现矩阵乘法的方法
    • 详解Python字符串对象的实现
    • python按照多个字符对字符串进行分割的方法
    • python实现多线程采集的2个代码例子
    • python爬虫入门教程之点点美女图片爬虫代码分享
    • Python实现的监测服务器硬盘使用率脚本分享
    • Python中super()函数简介及用法分享
    • pymssql数据库操作MSSQL2005实例分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有