本文摘自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数据分析有什么用
Python有栈吗
Python中如何将列表中的字符串连接成一个长路径的实例
r语言和Python有必要都学吗
Python中定义字符串
Python里fd是什么意思
Python开发tornado网站之异步与协程化的介绍
Python中对文件的相关处理操作的介绍(附代码)
一起深入 Python 类的内部
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python继承与多重继承的简单讲解(代码示例)