具有多级继承的TypeError?

时间:2017-02-25 09:12:51

标签: python inheritance maya multi-level

我有4个不同的课程:

meta
  -> Limb
      -> Arm
      -> Leg

meta是每个班级的基础。肢体继承自元。手臂和腿从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) # 

但是,当我尝试构建Leg模块时......

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模块继承?我在这里有点不知所措。

3 个答案:

答案 0 :(得分:1)

您可能需要创建一个命名空间,然后它才能正常工作

import Limb.Arm as limbArm
reload(limbArm)

import Limb.Leg as limbLeg
reload(limbLeg) 


def build():
    arm = limbArm.Arm()
    leg = limbLeg.Leg()

build()

答案 1 :(得分:1)

经过一些试验和错误后,我想出了这个。我不知道这是否是“正确”的做法,但它有效:

 <md-progress-circle 
              mode="determinate" 
              value= "+{{seconds}}" 
              aria-valuemax="60">            // I want to do something here.
</md-progress-circle>

答案 2 :(得分:0)

很难知道你怎么没有看到你的模块布局。但这听起来像是你颠倒了类的布局,以便导入重新定义Limb。你可能想要像这样组织你的包:

 limb
   + core.py 
   + arm.py
   + leg.py

使用core.py中的公共基类。在arm.pylimb.py中,您导入core.Limb并从中继承。这将允许您迭代派生类,而不会在重新加载时搞乱继承。