【问题标题】:Python abstract setters and gettersPython 抽象 setter 和 getter
【发布时间】:2023-03-04 16:37:01
【问题描述】:

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

此外,我想为我的抽象属性使用 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(这正是我想要的)

如何在不失去应用进一步提到的方法(也就是编写新方法并在我的抽象类设置器中执行它们)的所有好处的情况下实现此行为?

【问题讨论】:

    标签: python properties getter-setter abc


    【解决方案1】:

    从 abc 导入 ABCMeta,抽象方法

    类基(对象): 元类 = 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)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2013-11-11
      • 2016-02-24
      • 1970-01-01
      • 2012-01-31
      • 2018-05-11
      • 2020-05-29
      相关资源
      最近更新 更多