gpt4 book ai didi

python - 我可以在不使用 Python 3.6 中的元类的情况下编写 abc.ABC 吗?

转载 作者:行者123 更新时间:2023-11-30 22:34:00 25 4
gpt4 key购买 nike

Python 3.6添加PEP 487 ,这会添加 __init_subclass__方法等等。是否可以写一个 ABC 的版本不使用元类?

最佳答案

如果您只关心抽象方法的检查,那么是的。只需移动 abstract method set computation__init_subclass__ 方法:

def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
# Compute set of abstract method names
abstracts = {name
for name, value in vars(cls).items()
if getattr(value, "__isabstractmethod__", False)}
for base in cls.__bases__:
for name in getattr(base, "__abstractmethods__", set()):
value = getattr(cls, name, None)
if getattr(value, "__isabstractmethod__", False):
abstracts.add(name)
cls.__abstractmethods__ = frozenset(abstracts)

底座object.__new__ implementation然后使用非空的__abstractmethods__集来防止实例化。

但是 ABC 也支持 virtual subclass registration ; two hook methods this requires 必须在元类上实现。

关于python - 我可以在不使用 Python 3.6 中的元类的情况下编写 abc.ABC 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44977141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com