具有多级继承的TypeError?
问题描述:
我有4个不同的类:具有多级继承的TypeError?
meta
-> Limb
-> Arm
-> Leg
元是用于每类的基。肢体继承元。 Arm和Leg从Limb继承
Arm.py和Leg.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模块,代码也可以很好的运行。
import Limb.Arm
reload(Limb.Arm)
#import Limb.Leg
#reload(Limb.Leg)
有人可以解释为什么会发生这种情况吗?导入Arm模块后导入Leg模块时是否会覆盖某些内容,因为它们都是从Limb模块继承的?我在这里有点损失。
答
你可能需要创建一个命名空间,那么它应该工作
import Limb.Arm as limbArm
reload(limbArm)
import Limb.Leg as limbLeg
reload(limbLeg)
def build():
arm = limbArm.Arm()
leg = limbLeg.Leg()
build()
答
一些试验和错误后,我想出了这个。我不知道这是做的“正确”的方式,但一些它的工作原理:
def build_leg():
import Limb.Leg
reload(Limb.Leg)
leg = Limb.Leg.Leg()
def build_arm():
import Limb.Arm
reload(Limb.Arm)
arm = Limb.Arm.Arm()
build_leg()
build_arm()
答
这很难知道没有看到你是如何你由模块布局。但是,这听起来像是你颠倒了类的布局,以致Limb
正在被你的导入重新定义。你可能想要像这样组织你的包:
limb
+ core.py
+ arm.py
+ leg.py
与公共基类core.py
。在arm.py
和limb.py
中,您需要导入core.Limb
并从中继承。这将允许您迭代派生类,而不会在重新载入时弄乱继承。
不幸的是,这导致了相同的错误。我通过制作两种不同的功能来构建手臂和腿部,并将这些功能中的Arm和Leg模块导入,而不是在文件顶部。 –