在python 3.6中,當(dāng)我使用abstractmehodwith來裝飾一個(gè)withabc.abstractmethod的類時(shí)metaclass=abc.ABCMeta,可以從類(而非實(shí)例)的角度調(diào)用abstract方法。abc實(shí)例化時(shí),裝飾器似乎正在執(zhí)行檢查,因此從實(shí)例調(diào)用時(shí)不會(huì)完成。此行為非常令人不安,并且看起來像abc模塊中的錯(cuò)誤。我錯(cuò)過了什么?謝謝代碼示例: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}")結(jié)果:P.acm()OKP().acm()KO: Can't instantiate abstract class P with abstract methods acm
添加回答
舉報(bào)
0/150
提交
取消