在python 3.6中,当我使用abstractmehodwith来装饰一个withabc.abstractmethod的类时metaclass=abc.ABCMeta,可以从类(而非实例)的角度调用abstract方法。
abc实例化时,装饰器似乎正在执行检查,因此从实例调用时不会完成。
此行为非常令人不安,并且看起来像abc模块中的错误。
我错过了什么?
谢谢
代码示例:
import abc
import sys
class P(metaclass=abc.ABCMeta):
@classmethod
@abc.abstractmethod
def acm(cls):
pass
class X(P):
pass
print("P.acm()", file=sys.stderr)
try:
P.acm()
print("OK")
except Exception as e:
print(f"KO: {e}")
print("P().acm()", file=sys.stderr)
try:
P().acm()
print("OK")
except Exception as e:
print(f"KO: {e}")
结果:
P.acm()
OK
P().acm()
KO: Can't instantiate abstract class P with abstract methods acm
潇湘沐
随时随地看视频慕课网APP
相关分类