如何在python抽象类中创建抽象属性

在以下代码中,我创建了一个基本抽象类Base。我希望所有继承自其的类都Base提供该name属性,因此我将该属性设置为@abstractmethod

然后,我创建了一个Base名为的子类,该子类Base_1旨在提供一些功能,但仍保持抽象。中没有name属性Base_1,但是python实例化了该类的对象而没有错误。一个人如何创建抽象属性?

from abc import ABCMeta, abstractmethod

class Base(object):

__metaclass__ = ABCMeta

def __init__(self, strDirConfig):

self.strDirConfig = strDirConfig

@abstractmethod

def _doStuff(self, signals):

pass

@property

@abstractmethod

def name(self):

#this property will be supplied by the inheriting classes

#individually

pass

class Base_1(Base):

__metaclass__ = ABCMeta

# this class does not provide the name property, should raise an error

def __init__(self, strDirConfig):

super(Base_1, self).__init__(strDirConfig)

def _doStuff(self, signals):

print 'Base_1 does stuff'

class C(Base_1):

@property

def name(self):

return 'class C'

if __name__ == '__main__':

b1 = Base_1('abc')

回答:

从Python

3.3开始,修复了一个错误,这意味着property()装饰器现在应用于抽象方法时,可以正确地标识为抽象。

注:订单的问题,你必须使用@property@abstractmethod

(python

docs):

class C(ABC):

@property

@abstractmethod

def my_abstract_property(self):

...

(python

docs)

class C(ABC):

@abstractproperty

def my_abstract_property(self):

...

以上是 如何在python抽象类中创建抽象属性 的全部内容, 来源链接: utcz.com/qa/417292.html

回到顶部