将在一个变量中创建的列表传递给类中的另一个变量(PYTHON)

时间:2013-02-05 12:27:36

标签: python maya

我不明白为什么我的名单没有返回课堂并在我打电话给我的第二个功能后留在那里,这是我的代码:

class ShockAbsorber:
    '''create Proxy, based of 2 locators'''
    def createProxy(self):
        self.allLoc = {}
        self.allLoc["CylinderLoc"] = pm.spaceLocator (n = "Cylinder_Loc")
        self.allLoc["PistonLoc"] = pm.spaceLocator (n = "Piston_Loc", p =[0,30,0])
        pm.CenterPivot()

    '''create bones on locators'''
    def createRig(self):
        for name,loc in self.allLoc.items():
            print Loc

我在separete文件上有一个界面,为每个功能创建一个按钮。

    #define button Create Proxy
def CreateProxyPressed(self):
    csa = sa.ShockAbsorber() 
    csa.createProxy()

#define button Create Proxy
def CreateRigPressed(self):
    csa = sa.ShockAbsorber() 
    csa.createRig()

如果我运行我的代码,我会收到此错误消息:

AttributeError: ShockAbsorber instance has no attribute 'allLoc'

我希望这可以让您了解我的问题,我正在为“Autodesk Maya”编写工具。我很确定我的概念是正确的,所以我做错了什么?

提前谢谢!

P.S。我很抱歉这些混乱但我现在编辑了我的代码是正确的,因为我发现了我的拼写错误!

2 个答案:

答案 0 :(得分:0)

您需要将allLoc存储在类实例中,而不是将其返回:

def createProxy(self, *args):
    allLoc = {}
    allLoc["CylinderLoc"] = pm.spaceLocator (n = "Cylinder_Loc")
    allLoc["PistonLoc"] = pm.spaceLocator (n = "Piston_Loc", p =[0,30,0])
    pm.CenterPivot()
    self.allLoc = allLoc

答案 1 :(得分:0)

createProxy需要设置self.allLoc。您只设置本地名称allLoc