我想写一个抽象类,它将强制继承类以实现抽象类中的所有方法和属性。
此外,我还想使用setter和getter作为我的抽象属性,以使我的代码更整洁并且看起来不错
但是,当前的实现:
import abc
class Component(metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def status(self):
pass
@property
@status.setter
@abc.abstractmethod
def status(self, value):
pass
不强制继承类来为我的抽象属性getter实现getter,但不强制创建属性setter(正是我想要的)
如何实现这种行为而又不丧失应用进一步提到的方法(即编写新方法并在我的抽象类设置器中执行它们)的所有好处?
答案 0 :(得分:0)
从abc导入ABCMeta,抽象方法
Base类(对象): 元类 = ABCMeta
def __init__(self, val):
self._foo = val
@abstractmethod
def _doStuff(self, signals):
print ('Base does stuff')
@abstractmethod
def _get_foo(self):
return self._foo
@abstractmethod
def _set_foo(self, val):
self._foo = val + 'r'
foo = property(_get_foo, _set_foo)
floor_1(基础)类: 元类 = ABCMeta
def __init__(self, val):
self._foo = val
super(floor_1, self).__init__(val)
def _doStuff(self, signals):
print ('floor_1 does stuff')
def _get_foo(self):
return self._foo
def _set_foo(self, val):
#self._foo = val + 'r'
super()._set_foo(val + 'r')
foo = property(_get_foo, _set_foo)
floor_2(floor_1)类:
@property
def foo(self):
return self._foo
@foo.setter
def foo(self, val):
self._foo = val + 'r'
#super()._set_foo(val + 'r')
b1 = floor_1('bar')
print(b1.foo) b1.foo ='酒吧' 打印(b1.foo)