方法被读作属性?

时间:2014-04-22 01:42:31

标签: python

我不能使用这个类中的任何方法。每当我尝试时,我都会收到一个没有意义的错误。

Walker(cube)

c.move()

Error: Walker instance has no attribute 'move'

以下是代码:

import pymel.core as pm

import random

class Walker(object):

    def __init__(self, cube):
        self.cube = cube
        self.tx = 0
        self.ty = 0
        self.tz = 0


    def move(self):

        step_dict = {0: move_x, 1: move_y, 2: move_z}
        step = random.randint(0,2)
        self.step_dict[step]()

    def move_x(self):
        step_dict = {0: 1, 1: -1}
        step = random.randint(0,1)
        attr_value = selt.tx + step_dict[step]
        pm.setAttr('%s.translateX' % (self.cube), attr_value)
        self.tx = attr_value

    def move_y(self):
        step_dict = {0: 1, 1: -1}
        step = random.randint(0,1)
        attr_value = selt.ty + step_dict[step]
        pm.setAttr('%s.translateY' % (self.cube), attr_value)
        self.ty = attr_value

    def move_z(self):
        step_dict = {0: 1, 1: -1}
        step = random.randint(0,1)
        attr_value = selt.tz + step_dict[step]
        pm.setAttr('%s.translateZ' % (self.cube), attr_value)
        self.tz = attr_value

2 个答案:

答案 0 :(得分:0)

智能资金c不是Walker的实例。试试这个:

 type(c)

应该说

<class '__main__.Walker'>

答案 1 :(得分:0)

类方法必须是类块的一部分。

这使得“'Walker'对象没有属性'move'”,因为move()不是类方法。 “def move ..”必须缩进到与 init 相同的级别。

class Walker(object):

    def __init__(self, cube):
        self.cube = cube
        self.tx = 0
        self.ty = 0
        self.tz = 0

def move(self):
    print('hi')
    step_dict = {0: self.move_x(), 1: self.move_y(), 2: self.move_z()}
    step = random.randint(0,2)
    self.step_dict[step]()

c = Walker(27)
c.move()

以下是有效的,因为缩进使move()成为类块的一部分:

class Walker(object):

    def __init__(self, cube):
        self.cube = cube
        self.tx = 0
        self.ty = 0
        self.tz = 0

    def move(self):
        print('hi')
        step_dict = {0: self.move_x(), 1: self.move_y(), 2: self.move_z()}
        step = random.randint(0,2)
        self.step_dict[step]()

c = Walker(27)
c.move()