我编写了一个装饰(出于好奇的缘故)在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"
这究竟是为什么?
检查我的答案,这解决了你的问题。感谢这个问题。 –