python中的abstractmethod decorator
有什么作用?
from abc import abstractmethod
class Animal(object):
@abstractmethod
def walk(self):
''' data '''
pass
@abstractmethod
def talk(self):
''' data '''
pass
class Duck(Animal):
name = ''
def __init__(self, name):
print('duck created.')
self.name = name
def walk(self):
print('walks')
def talk(self):
print('quack')
obj = Duck('duck1')
obj.talk()
obj.walk()
但是,如果我注释装饰器,则代码仍然有效。
from abc import abstractmethod
class Animal(object):
def walk(self):
''' data '''
pass
def talk(self):
''' data '''
pass
class Duck(Animal):
name = ''
def __init__(self, name):
print('duck created.')
self.name = name
def walk(self):
print('walks')
def talk(self):
print('quack')
obj = Duck('duck1')
obj.talk()
obj.walk()
我的问题是,为什么要麻烦使用这个装饰器?我什至删除了Duck
中的某些方法,例如talk
。然后它不会崩溃。我让我不明白我们何时需要使用此abstractmethod
?
答案 0 :(得分:0)
python中的abstractmethod装饰器有什么作用?
指示抽象方法的装饰器。
使用此装饰器要求该类的元类为ABCMeta或 从中得出。具有从ABCMeta派生的元类的类 除非其所有抽象方法和 属性被覆盖。
请注意,在您的示例中,基类Animal
不使用ABCMeta,因为它是元类,因此装饰器实际上实际上是无用的。