抽象类可以有子类(抽象类的子类化机制)
导读:抽象类:可以作为顶层基类,从高层次规范编程接口 1、在abc模块中,最常见的抽象类有Iterable,我们可以用他判断一个对象是不是可迭代对象...
抽象类:可以作为顶层基类 ,从高层次规范编程接口
1 、在abc模块中 ,最常见的抽象类有Iterable ,我们可以用他判断一个对象是不是可迭代对象output:
True
2 、抽象类的子类化机制2.1 、重写__subclasshook__类方法 ,定制抽象类的子类判断逻辑 ,这种子类化形式只关心结构 ,不关心真实的继承关系 ,称之为:结构化子类
1 import abc
2
3
4 class A(abc.ABC):
5 @classmethod
6 def __subclasshook__(cls, c):
7 if any("verify" in b.__dict__ for b in c.__mro__):
8 return True
9 return False
10
11
12 class Valley:
13 def __init__(self):
14 ...
15
16 def verify(self):
17 print(1)
18
19
20 if __name__ == "__main__":
21 print(isinstance(Valley(), A))
output:
True
2.2 、继承抽象基类元类register方法直接注册
1 import abc
2
3
4 class A(abc.ABC):
5 ...
6
7
8 class Valley:
9 def __init__(self):
10 ...
11
12 def verify(self):
13 print(1)
14
15
16 A.register(Valley)
17 if __name__ == "__main__":
18 print(isinstance(Valley(), A))
目前未找到合适的应用场景 ,希望知晓的可以在下面写个小demo ,我参考参考
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!