在python 3.6中,当我使用abstractmehodwith来装饰一个withabc.abstractmethod的类时metaclass=abc.ABCMeta,可以从类(而非实例)的角度调用abstract方法。abc实例化时,装饰器似乎正在执行检查,因此从实例调用时不会完成。此行为非常令人不安,并且看起来像abc模块中的错误。我错过了什么?谢谢代码示例:import abcimport sysclass P(metaclass=abc.ABCMeta): @classmethod @abc.abstractmethod def acm(cls): passclass X(P): passprint("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()OKP().acm()KO: Can't instantiate abstract class P with abstract methods acm
添加回答
举报
0/150
提交
取消