假设我有一个Joint
类,它控制机器人腿的伺服角度(例如joint
类的实例是knee
、hip
或ankle
)。最好的办法是什么?下面是我的选项,假设我想把关节的角度设置为90度
set()
函数,这样我就可以执行hip.set(90)
__call___
函数以便我可以执行hip(90)
__setitem__
函数以便我可以执行hip = 90
我应该用什么?为什么这是最好的?你知道吗
编辑:
现在我的课是这样的:
class Joint:
def __init__(self, joint_type, jkey, min_angle = -90, max_angle = 90):
self.joint_type, self.name = joint_type, jkey
self.channel, self.min_pulse, self.max_pulse = joint_properties[jkey]
self.min_angle, self.max_angle = min_angle, max_angle
self.off()
def set(self, angle):
angle = constrain(angle, self.min_angle, self.max_angle)
pulse = remap(angle, self.min_angle, self.max_angle, self.min_pulse, self.max_pulse)
drive(self.channel, pulse)
self.current_angle = angle
def off(self):
drive(self.channel, 0)
self.current_angle = None
但是,如果您对该属性有验证、检查和副作用(可能有),您可以为
hip
属性设置一个property
。。。你知道吗这种定义getter和setter的方法是Python的一个非常好的特性:对于任何使用类实例的人来说,所需要的只是一个属性。在引擎盖下,getter和setter方法被调用。你知道吗
property
是一个特殊的内置修饰符-在早期版本中,它只构建属性对象,并且必须传入一个普通函数调用getter和可选的setter和deleter函数。新的decorator语法较短,但看起来有点神奇-另一种方式更容易掌握新来者的情况:(其工作原理相同,但它还公开了类命名空间中的getter和setter函数)
相关问题 更多 >
编程相关推荐