Python 抽象 setter 和 getter

Jak*_*zuk 5 python properties abc getter-setter

我想编写抽象类,强制继承类在我的抽象类中实现所有方法和属性。

另外,我想对我的抽象属性使用 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
Run Code Online (Sandbox Code Playgroud)

确实强制继承类为我的抽象属性 getter 实现 getter,但不强制创建属性设置器(这正是我想要的)

我怎样才能在不失去应用进一步提到的方法的所有好处的情况下实现这种行为(也就是编写新方法并在我的抽象类 setter 中执行它们)?

小智 0

from abc import ABCMeta, abstractmethod

class Base(object):
    __metaclass__ = 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)

class floor_1(Base):
    __metaclass__ = 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)

class 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 = 'bar'
print(b1.foo)
Run Code Online (Sandbox Code Playgroud)