为了账号安全,请及时绑定邮箱和手机立即绑定

Python 3.6:classmethod上的abc.abstracmethod在类级调用上不检查

Python 3.6:classmethod上的abc.abstracmethod在类级调用上不检查

潇湘沐 2021-05-13 14:41:30
在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
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号