首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python需要抽象方法。

python需要抽象方法。
EN

Stack Overflow用户
提问于 2019-06-26 06:44:55
回答 1查看 415关注 0票数 1

python中的abstractmethod decorator做什么?

代码语言:javascript
复制
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()

但是,如果我评论装饰师,代码仍然有效。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-26 07:08:39

python中的抽象方法装饰器是做什么的?

检查医生?

表示抽象方法的装饰器。 使用这个装饰符需要类的元类是ABCMeta或派生自它。具有从ABCMeta派生的元类的类不能实例化,除非它的所有抽象方法和属性都被重写。

请注意,在您的示例中,基类Animal类不使用ABCMeta,因为它是元类,因此装饰器基本上是无用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56766703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档