本文摘自php中文网,作者不言,侵删。
本篇文章给大家带来的内容是python继承与多重继承的简单讲解(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。记住以下几点:
直接子类化内置类型(如dict,list或str)容易出错,因为内置类型的方法通常会忽略用户覆盖的方法,不要子类化内置类型,用户自定义的类应该继承collections模块。
1 2 3 4 5 6 7 8 9 10 11 12 | def __setitem__(self, key, value):
super().__setitem__(key, [value] * 2) # 错误案例
class AnswerDict(dict):
def __getitem__(self, item): # 错误案例
return 42
import collections
class DoppelDict2(collections.UserDict): # 正确案例
def __setitem__(self, key, value):
super().__setitem__(key, [value] * 2)
class AnswerDict2(collections.UserDict): # 正确案例
def __getitem__(self, item):
return 42
|
多重继承有关的另一个问题就是:如果同级别的超类定义了同名属性.Python如何确定使用哪个?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class DoppelDict(dict):
def __setitem__(self, key, value):
super().__setitem__(key, [value] * 2)
class AnswerDict(dict):
def __getitem__(self, item):
return 42
import collections
class DoppelDict2(collections.UserDict):
def __setitem__(self, key, value):
super().__setitem__(key, [value] * 2)
class AnswerDict2(collections.UserDict):
def __getitem__(self, item):
return 42
class A:
def ping(self):
print('Ping:', self)
class B(A):
def pong(self):
print('pong:', self)
class C(A):
def pong(self):
print('PONG:', self)
class D(B, C):
def ping(self):
super().ping()
print('post-ping:', self)
def pingpong(self):
self.ping()
super().ping()
self.pong()
super().pong()
C.pong(self)
if __name__ == '__main__':
d = D()
print(d.pong()) # 输出来源于B
print(C.pong(d)) #输出来源于C 超类的方法都可以直接调用,此时要把实例作为显示参数传入.
|
阅读剩余部分
相关阅读 >>
Python面向对象编程中类和实例的简单讲解(附示例)
Python怎么创建django
Python怎么粘贴代码
8年后Python重登2018年度编程语言王座
如何在Python环境下安装selenium+headless chrome
继承中的mro与super详解
Python中判断语句与循环语句的简单小结(附示例)
Python针对任意多的分隔符拆分字符串(附代码)
Python如何配置清华镜像源
在sublime中如何搭建Python开发环境讲解
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python继承与多重继承的简单讲解(代码示例)