学习Python之面向对象补充

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理

原文链接:30 Days of Python :man:‍:computer: - Day 10 - OOP Missing Pieces

想要获取更多Python学习资料,了解更多关于Python的知识,可以加Q群630390733踊跃发言,大家一起来学习讨论吧!

Super()

super 是Python中的一个保留字(在Python2.2中被引入),在继承中使用。当一个子类继承自一个父类,并且需要调用这个父类上的方法时,就需要用到 super 。这样听起来可能让人有些疑惑,来看一个例子:

不使用 super

在这个例子中,父类的 __init__ 构造方法用类名调用, self 对象作为第一个参数被传入。

使用 super (注意它不需要传入参数 self )

像上面代码中的构造方法一样,父类的任何方法在子类中都能够使用 super() 调用。

在JavaScript中,语法更简单一点, super 的调用方式类似 super(parameter) 这样。但是我喜欢Python的语法。使用 super 调用 __init__ 方法更加清楚。

内省

Python能够计算在运行时计算对象的类型(在Python中一切皆对象)。这意味着编译器在运行时能够动态的理解对象的属性和方法。这叫做 内省 。

Python提供了一个内置函数 dir 来对一个对象进行内省。

魔术方法

在Python中,通过定义一些 魔术方法 类会变得更加强大。这些方法名的前面和后面都有两个 __ ,在Python中被预先定义,有着特殊的用途。例如,我们可以访问内置函数,因为它被定义为一个特殊的魔术方法 __len__

我修改了 Sentence 类,这样我们就可以使用内置方法 len ,默认情况下, len 不能用于实现自定义逻辑。魔术方法看上去非常的方便。

多继承

一个类从多个类中继承属性和方法是有可能的。多继承是一个强大的概念,但也是危险的。在JavaScript中,多继承是不被支持的。

当父类有需要初始化的构造函数方法时,它可能会变得有点复杂。在子类中,它所继承所有类的构造函数方法都需要初始化。

方法解析顺序

方法解析顺序或简称 mro ,是Python中属性和方法继承的顺序。

当从多个类继承时,属性和方法由特定层次结构中的子类继承。Python中实现此功能的底层算法使用深度优先搜索算法。

为了了解继承顺序,Python提供了一个方法 mro ,可以在对象上调用该方法来查看继承的层次结构。

多继承可能很难理解,所以这种模式在实践中并不常用。

这就是今天所有的内容了。最后讲完了Python中的面向对象编程概念。我们的目标是在这个挑战结束后,开始构建真正的Python项目时使用这些原则。

我希望我能够涵盖Python中所有关键的面向对象编程概念,并且解释的足够通俗易懂。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值