我有4个不同的班级:
meta
-> Limb
-> Arm
-> Leg
元是每个类的基础。肢体从元继承。手臂和腿从肢体继承
那个手臂.py以及腿.py文件有完全相同的代码,只是一些不同的字符串用于命名约定。你知道吗
当我执行以下操作时:
import Limb.Arm
reload(Limb.Arm)
import Limb.Leg
reload(Limb.Leg)
def build():
arm = Limb.Arm.Arm()
build()
我得到一个错误:
# TypeError: unbound method __init__() must be called with Limb instance as first argument (got Arm instance instead) #
但是,当我尝试构建腿部模块时。。。你知道吗
import Limb.Arm
reload(Limb.Arm)
import Limb.Leg
reload(Limb.Leg)
def build():
leg= Limb.Leg.Leg()
build()
一切正常:
==> SUCCESS: L_Leg created!
如果我这样注释掉加载Leg模块,那么代码对于arm也可以正常运行。你知道吗
import Limb.Arm
reload(Limb.Arm)
#import Limb.Leg
#reload(Limb.Leg)
有人能解释为什么会这样吗?在导入手臂模块之后,导入腿部模块时是否会覆盖某些内容,因为它们都继承自肢体模块?我在这里有点不知所措。你知道吗
您可能需要创建一个名称空间,然后它就可以工作了
很难不看清楚你的模块是如何布置的。但这听起来像是颠倒了类的布局,这样
Limb
就会被导入重新定义。您可能希望这样组织您的包:在
core.py
中使用公共基类。在arm.py
和limb.py
中导入core.Limb
并从中继承。这将允许您在派生类上迭代,而不会在重新加载时破坏继承。你知道吗经过反复试验,我想到了这个。我不知道这是不是“正确”的方法,但它确实有效:
相关问题 更多 >
编程相关推荐