Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写从多个文件中提取子类(方法)的类的正确方法是什么_Python_Python 3.x_Class_Pylint - Fatal编程技术网

Python 编写从多个文件中提取子类(方法)的类的正确方法是什么

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():

我编写了一个类作为寄存器映射的中央数据管理引擎。我已经编写了提供各种输入解析器和输出格式化程序的子类(更像是扩展)。然而,它们依赖于能够访问主类的内部变量来进行操作。我希望将扩展与主类分开,但能够将所有方法公布给主类的实例化器

实际上一切都很好,只是我从表单的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)。我的问题是,对于维护和可读性来说,什么是最好的/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会告诉我模块太长。我可以将它重组为一个类和几个单独的程序,这些程序作为构造函数和翻译器作用于该类,但用户将无法方便地进行单个导入,也无法将所有方法绑定到数据上,这就是我目前所拥有的。