使用哪个函数来设置关节类实例的角度

2024-05-23 21:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个Joint类,它控制机器人腿的伺服角度(例如joint类的实例是kneehipankle)。最好的办法是什么?下面是我的选项,假设我想把关节的角度设置为90度

  1. 定义一个set()函数,这样我就可以执行hip.set(90)
  2. 重写__call___函数以便我可以执行hip(90)
  3. 重写__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 

Tags: 函数selfdeftypechannelminmaxpulse
1条回答
网友
1楼 · 发布于 2024-05-23 21:40:38
hip.angle = 90

但是,如果您对该属性有验证、检查和副作用(可能有),您可以为hip属性设置一个property。。。你知道吗

class Joint(object):
    ...
    @property
    def hip(self):
          return self._hip

    @hip.setter
    def hip(self, value):
          validate(value) 
          send_to_external_device(value)
          self._hip = value

这种定义getter和setter的方法是Python的一个非常好的特性:对于任何使用类实例的人来说,所需要的只是一个属性。在引擎盖下,getter和setter方法被调用。你知道吗

property是一个特殊的内置修饰符-在早期版本中,它只构建属性对象,并且必须传入一个普通函数调用getter和可选的setter和deleter函数。新的decorator语法较短,但看起来有点神奇-另一种方式更容易掌握新来者的情况:

class Joint(object):
    ...

    def _get_hip(self):
          return self._hip

    def _set_hip(self, value):
          validate(value) 
          send_to_external_device(value)
          self._hip = value

    hip = property(_get_hip, _set_hip)

(其工作原理相同,但它还公开了类命名空间中的getter和setter函数)

相关问题 更多 >