【发布时间】:2019-12-22 00:53:15
【问题描述】:
在 python 中,我有一个基类,从中派生出一组子类。每个子类都有一些特定于子类的函数和许多独特的属性,这些属性具有使用@property 装饰器定义的getter 和setter。但是如果我有很多属性,就会导致很多代码重复,因为 getter 和 setter 都具有相同的形式。这是一个粗略的示例草图,以数据库访问为例:
class BaseClass():
def __init__(self):
self.handle = None
def write(self, **kwargs):
self.handle.write(**kwargs)
class subClass_1(BaseClass):
def __init__(self):
self.handle = db_connector("table1")
@property
def property1a(self):
return self.handle.read('columnX')
@property1a.setter
def property1a(self, data):
self.write(columnX=data)
@property
def property1b(self):
return self.handle.read('columnY')
@property1b.setter
def property1b(self, data):
self.write(columnY=data)
def some_bespoke_function():
pass
class subClass_2(BaseClass):
def __init__(self):
self.handle = db_connector("table2")
@property
def property2a(self):
return self.handle.read('columnZ')
@property2a.setter
def property2a(self, data):
self.write(columnZ=data)
def another_bespoke_function():
pass
有什么方法可以在 BaseClass 中定义一些东西以避免编写所有这些 @property 装饰器?理想情况下,我只需在子类中定义一些东西,例如为 SubClass_1 定义 self.mapping = {'property1a':'columnX', 'property1a':'columnX'} 和为 SubClass_2 定义 self.mapping = {'property2a':'columnZ'}。
【问题讨论】:
标签: python python-decorators python-descriptors