百木园-与人分享,
就是让自己快乐。

抽象类的子类化机制

抽象类:可以作为顶层基类,从高层次规范编程接口

1、在abc模块中,最常见的抽象类有Iterable,我们可以用他判断一个对象是不是可迭代对象
 1 from collections.abc import Iterable
 2 
 3 
 4 class Valley:
 5 
 6     def __iter__(self):
 7         ...
 8 
 9 
10 if __name__ == \"__main__\":
11     print(isinstance(Valley(), 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,我参考参考

 

只有永不遏止的奋斗,才能使青春之花,即便是凋谢,也是壮丽地凋谢


来源:https://www.cnblogs.com/shixiaogu/p/16911491.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 抽象类的子类化机制

相关推荐

  • 暂无文章