我已经编写了一个类作为寄存器映射的中央数据管理引擎。我编写了子类(很像扩展),它提供了各种输入解析器和输出格式化程序。但是,它们依赖于能够访问主类的内部变量才能进行操作。我想使扩展与主类分离,但能够将所有方法通告给主类的实例化器。
实际上一切正常,除了我从Pylint收到以下形式的许多错误: E:275,8:'RegMapXLS'的实例没有'log'成员(无成员) log是主类中的共享函数。
# typical "extension" class
class RegMapXLS():
''' The part of RegisterMap class which contains the xlsx source file
parsing functions
'''
def parse_config(self, configsheet):
# main class including all "extension class inherritance"
class RegisterMap(RegMapXLS, RegMapPy, RegMapDocx, RegMapVhdl):
'''Register map bundling settings as instances of the class Setting.
'''
# only this class has an __init__ call to instantiate it and its code
def __init__(self, name, output_path, report=None):
我当然可以将整个事情写成一个大类,但是出于可维护性的考虑,我将它们分成了几个文件。另一种方法是编写一个所有“姐妹”类都继承的“基类”,并创建一个只继承所有部分的空类(尽管不清楚然后我如何称呼 init 方法2降低)。我的问题是什么是最好的/ Python方式以及维护和可读性。
最后我想要的是一个可以编写的简单UI:
with RegisterMap(udi, output_path=output_path) as regmap:
regmap.parse_source(regmap_source)
#these methods are pulled in from other source files/authors
regmap.export_HDF5(output_path)
regmap.to_vhdl(regmap_reg_pkg_template)
regmap.to_pin()
regmap.to_docx(doc_template=doc_template)