Python抽象设置器和获取器

时间:2018-11-28 23:47:15

标签: python properties getter-setter abc

我想写一个抽象类,它将强制继承类以实现抽象类中的所有方法和属性。

此外,我还想使用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(正是我想要的)

如何实现这种行为而又不丧失应用进一步提到的方法(即编写新方法并在我的抽象类设置器中执行它们)的所有好处?

1 个答案:

答案 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')

b1 = floor_2('bar')

print(b1.foo) b1.foo ='酒吧' 打印(b1.foo)