我有两个非常相似的课程。事实上,这两个类之间的唯一区别是其中一个类有一个额外的字段。
为了保持代码DRY,我希望这两个类继承自基类,但我不确定如何处理其他字段属性。
解决方案可以是遍历类的属性,并在基类中实现它。以下伪代码说明了这一点:
class WidgetBase():
__base_required_field_names = ('a','b','c')
def __init__(self, name, **kwargs):
self.name = name
self.__encountered_names = []
for key, value in kwargs.items():
# ensure name not previously encountered, else raise error
# create attribute and assign value
pass
# if not all required base fields not provided raise error
def update(self, **kwargs):
# if unknown field raise error, else update field
pass
def write_to_file(self):
# write attributes to CSV file
pass
class Widget(BaseWidget):
pass
class AdvancedWidget(BaseWidget):
pass
# Example Usage
from datetime import datetime
import csv
widget = Widget('foo',a=1729,b=None,c=datetime.now())
widget.update(a=22,b='Babylonia')
widget.write_to_file()
awe = AdvancedWidget('notfoobar',a=22/7, b='Plimpton 322', c=datetime.now())
awe.update(c=datetime.strptime('20010101','%Y%m%d'))
awe.write_to_file()
这是实施所需功能的推荐方法(即“最佳做法”)吗?
我的主要问题是:
如何动态创建新属性并迭代它们?