我編寫了一個裝飾(出於好奇的緣故)在python中做了一個類抽象。到目前爲止,它看起來會起作用,但我得到了意想不到的行爲。Python抽象裝飾不起作用
用於裝修的想法是這樣的:
from abc import ABCMeta, abstractmethod
def abstract(cls):
cls.__metaclass__ = ABCMeta
return cls
然後,使用該裝飾時,它只是需要定義一個抽象的方法
@abstract
class Dog(object):
@abstractmethod
def bark(self):
pass
但是,當我考,我能實例化Dog對象:
d = Dog()
d.bark() //no errors
Dog.__metaclass__ //returned "<class 'abc.ABCMeta'>"
當測試指定__metaclass__
直接,它像預期的那樣:
測試:
d = Dog()
"Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
d = Dog()
TypeError: Can't instantiate abstract class Dog with abstract methods bark"
這究竟是爲什麼?
檢查我的答案,這解決了你的問題。感謝這個問題。 –