我在代码库中遇到了这段代码:
class Worker(object):
state_names = {}
def __init__(self, status_value):
self.status_value = status_value
@property
def state(self):
return self.status_value.value
@state.setter
def state(self, status):
self.ui.debug('state: {} -> {}'
''.format(self.state_name(), self.state_name(status)))
self.status_value.value = status
def state_name(self, s=None):
return self.state_names[s or self.state]
它有一些明显的问题:
self.state_names
是只读且空的self.ui
不存在在环顾一段时间后,我意识到有一个类派生于此,并且知道有self.ui
并提供self.state_names
。
我认为以这种方式实现抽象类有点奇怪,其中虚拟成员函数具有在派生类中承担数据成员的实现。
在python中有更好,更清晰的方法来进行这种开发模式吗?我将假设AbstractBaseClass是一个起点。