Python抽象的设置器和获取器

问题描述 投票:4回答:1

我想写一个抽象类,迫使继承类实现我的抽象类中的所有方法和属性。

此外,我想在我的抽象属性中使用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个回答
0
投票

从abc导入ABCMeta,abstractmethod。

class Base(object):元类 = 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)。元类 = 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).b1 = floor_1('bar'):

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

© www.soinside.com 2019 - 2024. All rights reserved.