本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理
原文链接: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中所有关键的面向对象编程概念,并且解释的足够通俗易懂。