Python 编写从多个文件中提取子类(方法)的类的正确方法是什么
我编写了一个类作为寄存器映射的中央数据管理引擎。我已经编写了提供各种输入解析器和输出格式化程序的子类(更像是扩展)。然而,它们依赖于能够访问主类的内部变量来进行操作。我希望将扩展与主类分开,但能够将所有方法公布给主类的实例化器 实际上一切都很好,只是我从表单的Pylint中得到了很多错误: E:275,8:“RegMapXLS”的实例没有“log”成员(没有成员) 其中log是主类中的共享函数Python 编写从多个文件中提取子类(方法)的类的正确方法是什么,python,python-3.x,class,pylint,Python,Python 3.x,Class,Pylint,我编写了一个类作为寄存器映射的中央数据管理引擎。我已经编写了提供各种输入解析器和输出格式化程序的子类(更像是扩展)。然而,它们依赖于能够访问主类的内部变量来进行操作。我希望将扩展与主类分开,但能够将所有方法公布给主类的实例化器 实际上一切都很好,只是我从表单的Pylint中得到了很多错误: E:275,8:“RegMapXLS”的实例没有“log”成员(没有成员) 其中log是主类中的共享函数 # typical "extension" class class RegMapXLS():
# 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)。我的问题是,对于维护和可读性来说,什么是最好的/Pythonic的方式
我最终想要的是一个简单的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)
我应该补充一点,我收到的错误消息来自Pylint。Python本身也很高兴。您意识到您的继承是错误的,对吗?父类不继承子类,子类继承父类。。。也就是说,如果
RegMapXLS
是一个子项,那么它应该继承RegisterMap
,这不是您当前的继承方式。@Error syntactical懊悔,您是对的,我把整个父项/子项都放在了前面;在我的例子中,它们是姐妹类,既不是家长也不是孩子。这就是为什么我呼吁像你这样有学问的人教我如何正确地做这件事。在实践中工作很好,但我想学习如何成为大师:o)。您的扩展类类似于mix-in,但mix-in的用例是可以由多个不相关的类使用的代码。在这里,我需要更令人信服的是,在多个文件中拆分RegisterMap
实际上会有任何好处。@chepner。如果我将所有内容都放在同一个类中,它大约有2000行长,Pylint会告诉我模块太长。我可以将它重组为一个类和几个单独的程序,这些程序作为构造函数和翻译器作用于该类,但用户将无法方便地进行单个导入,也无法将所有方法绑定到我目前拥有的数据。我应该补充一点,我得到的错误消息来自Pylint。Python本身也很高兴。您意识到您的继承是错误的,对吗?父类不继承子类,子类继承父类。。。也就是说,如果RegMapXLS
是一个子项,那么它应该继承RegisterMap
,这不是您当前的继承方式。@Error syntactical懊悔,您是对的,我把整个父项/子项都放在了前面;在我的例子中,它们是姐妹类,既不是家长也不是孩子。这就是为什么我呼吁像你这样有学问的人教我如何正确地做这件事。在实践中工作很好,但我想学习如何成为大师:o)。您的扩展类类似于mix-in,但mix-in的用例是可以由多个不相关的类使用的代码。在这里,我需要更令人信服的是,在多个文件中拆分RegisterMap
实际上会有任何好处。@chepner。如果我将所有内容都放在同一个类中,它大约有2000行长,Pylint会告诉我模块太长。我可以将它重组为一个类和几个单独的程序,这些程序作为构造函数和翻译器作用于该类,但用户将无法方便地进行单个导入,也无法将所有方法绑定到数据上,这就是我目前所拥有的。