ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python3 – 如何从现有的抽象类定义抽象子类?

2019-06-11 04:43:34  阅读:264  来源: 互联网

标签:python oop python-3-x inheritance abstract-class


我最初定义了以下抽象类:

from abc import ABC, abstractmethod    
class Primitive(ABC):

现在我想创建另一个继承自Primitive的抽象类:

class InstrumentName(Primitive)

我需要这个类是抽象的,因为我最终想要创建以下两个具体类:

class CurrencyInstrumentName(InstrumentName)
class MetalInstrumentName(InstrumentName)

我已阅读文档并搜索了SO,但它们主要涉及从抽象类中提取具体类,或讨论Python如何处理抽象

解决方法:

只是子类,你不需要做任何特别的事情.

只有在实现中不再有abstractmethod和abstractproperty对象时,类才会变得具体.

让我们来说明一下:

from abc import ABC, abstractmethod    
class Primitive(ABC):
    @abstractmethod
    def foo(self):
        pass

    @abstractmethod
    def bar(self):
        pass

class InstrumentName(Primitive):
    def foo(self):
        return 'Foo implementation'

这里,InstrumentName仍然是抽象的,因为bar是一个抽象方法.您无法创建该子类的实例:

>>> InstrumentName()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class InstrumentName with abstract methods bar

子类还可以根据需要添加@abstractmethod或@abstractproperty方法.

在引擎盖下,所有子类都继承了强制执行此操作的ABCMeta元类,它只是检查类中是否还有@abstractmethod或@abstractproperty属性.

标签:python,oop,python-3-x,inheritance,abstract-class
来源: https://codeday.me/bug/20190611/1216307.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有