我不能使用这个类中的任何方法。每当我尝试时,我都会收到一个没有意义的错误。
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
答案 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()