Python 从模块继承时重新加载模块会导致typeError。我想知道为什么

Python 从模块继承时重新加载模块会导致typeError。我想知道为什么,python,inheritance,typeerror,reload,Python,Inheritance,Typeerror,Reload,所以,我有下面的设置,它会抛出问题末尾的错误。谁能告诉我为什么?我相信,当有人解释这个错误时,这个错误是完全有道理的,但我自己就是想不出来 baseCmds.py class base(): .... import baseCmds reload(baseCmds) class main(baseCmds.base): def __init__(self): baseCmds.base.__init__(self) .... import baseCm

所以,我有下面的设置,它会抛出问题末尾的错误。谁能告诉我为什么?我相信,当有人解释这个错误时,这个错误是完全有道理的,但我自己就是想不出来

baseCmds.py

class base():
    ....
import baseCmds
reload(baseCmds)
class main(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import baseCmds
reload(baseCmds)
class simple(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import mainCmds
import simpleCmds

reload(mainCmds)
reload(simpleCmds)

m = mainCmds.main()
s = simpleCmds.simple()
mainCmds.py

class base():
    ....
import baseCmds
reload(baseCmds)
class main(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import baseCmds
reload(baseCmds)
class simple(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import mainCmds
import simpleCmds

reload(mainCmds)
reload(simpleCmds)

m = mainCmds.main()
s = simpleCmds.simple()
simpleCmds.py

class base():
    ....
import baseCmds
reload(baseCmds)
class main(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import baseCmds
reload(baseCmds)
class simple(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import mainCmds
import simpleCmds

reload(mainCmds)
reload(simpleCmds)

m = mainCmds.main()
s = simpleCmds.simple()
build.py

class base():
    ....
import baseCmds
reload(baseCmds)
class main(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import baseCmds
reload(baseCmds)
class simple(baseCmds.base):
    def __init__(self):
        baseCmds.base.__init__(self)
    ....
import mainCmds
import simpleCmds

reload(mainCmds)
reload(simpleCmds)

m = mainCmds.main()
s = simpleCmds.simple()
然后根据
build.py
中的
reload()
语句的顺序,我得到

# Traceback (most recent call last):
#   File "<string>", line 12, in <module>
#   File "C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py", line 62, in <module>
#     build()
#   File "C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py", line 59, in build
#     buildRig(assetName="TestGuy", assetType="character", debug=0)
#   File "C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py", line 19, in buildRig
#     m = mainCmds.main()
#   File "C:/Users/Vasko/Documents/maya/scripts\vsRigging\rigCmds\bodyCmds\mainCmds.py", line 14, in __init__
#     baseCmds.base.__init__(self)
# TypeError: unbound method __init__() must be called with base instance as first argument (got main instance instead)
#回溯(最近一次呼叫最后一次):
#文件“”,第12行,在
#文件“C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py”,第62行,在
#构建()
#文件“C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py”,第59行,内部版本
#buildRig(assetName=“TestGuy”,assettType=“character”,debug=0)
#buildRig中第19行的文件“C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py”
#m=mainCmds.main()
#文件“C:/Users/Vasko/Documents/maya/scripts\vsRigging\rigCmds\bodyCmds\mainCmds.py”,第14行,在uu init中__
#baseCmds.base.\uuuu init\uuuuu(自)
#TypeError:必须以基本实例作为第一个参数调用未绑定的方法_uinit__;()

#回溯(最近一次呼叫最后一次):
#文件“”,第12行,在
#文件“C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py”,第62行,在
#构建()
#文件“C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py”,第59行,内部版本
#buildRig(assetName=“TestGuy”,assettType=“character”,debug=0)
#buildRig中的文件“C:\\Users\\Vasko\\Documents\\maya\\scripts\\vsRigging\\builds\\vsTest\\characters\\TestGuy\\body.py”,第20行
#s=simpleCmds.simple()
#文件“C:/Users/Vasko/Documents/maya/scripts\vsRigging\rigCmds\basicmds\simpleCmds.py”,第7行,在_init中__
#baseCmds.base.\uuuu init\uuuuu(自)
#TypeError:必须以基本实例作为第一个参数调用未绑定的方法_uinit__u;()(取而代之的是简单实例)

首先,Python中根本不建议重新加载。但我不明白您想做什么:为什么在导入模块后立即重新加载它?最后,如果包含完整的错误报告,而不仅仅是一行错误消息,则更容易了解发生了什么。首先,如果不建议重新加载,请详细说明?为了帮助您理解我试图做的事情:导入模块后,我会立即重新加载模块,因为我正在外部IDE中编写代码,而解释器需要重新加载模块,所以我的更改会实现。最后,为了便于您理解,我已经包含了完整的错误报告。导入模块后立即重新加载模块是没有意义的。重新加载是提取自模块导入以来所做的更改。顺便说一句,在Python中重新加载很困难的原因之一是它会重新定义那些模块中的类,现在有两个同名的不同类。从该类生成的现有对象将不会引用新类。这真是一团糟。对了,第二条评论似乎在某种程度上解释了我的处境,所以谢谢你。至于重新加载,删除它们会导致解释器选择旧版本(我第一次运行脚本时调用的版本)。对于如何让它阅读我的最新更改,但不创建两个不同的类,您有什么建议吗?首先,在Python中根本不建议重新加载。但我不明白您想做什么:为什么在导入模块后立即重新加载它?最后,如果包含完整的错误报告,而不仅仅是一行错误消息,则更容易了解发生了什么。首先,如果不建议重新加载,请详细说明?为了帮助您理解我试图做的事情:导入模块后,我会立即重新加载模块,因为我正在外部IDE中编写代码,而解释器需要重新加载模块,所以我的更改会实现。最后,为了便于您理解,我已经包含了完整的错误报告。导入模块后立即重新加载模块是没有意义的。重新加载是提取自模块导入以来所做的更改。顺便说一句,在Python中重新加载很困难的原因之一是它会重新定义那些模块中的类,现在有两个同名的不同类。从该类生成的现有对象将不会引用新类。这真是一团糟。对了,第二条评论似乎在某种程度上解释了我的处境,所以谢谢你。至于重新加载,删除它们会导致解释器选择旧版本(我第一次运行脚本时调用的版本)。关于如何让它阅读我的最新更改,但不创建两个不同的类,您有什么建议吗?