определение переменных внутри функции, принадлежащей классу - PullRequest
0 голосов
/ 10 января 2020

В коде есть класс, у которого есть функция с именем 'goal_callback'. В функции переменные определяются с использованием префикса .init, а другие определяются без префикса. Я знаю, что сам. Префикс используется для того, чтобы сделать переменную «переменной класса», чтобы она была доступна для каждой функции в классе. Так что в коде у меня есть только одна функция, имеет ли это значение, если мы определяем переменные с помощью self. префикс или нет. В чем именно будет разница между переменной _pub_takeoff и переменной takeoff_or_land?

#! /usr/bin/env python

class CustomActionMsgClass(object):
  def __init__(self):
    self._as = actionlib.SimpleActionServer("action_custom_msg_as", CustomActionMsgAction, 
    self.goal_callback, False)
  def goal_callback(self, goal): 
    success = True
    r = rospy.Rate(1)
    self._pub_takeoff = rospy.Publisher('/drone/takeoff', Empty, queue_size=1)
    self._takeoff_msg = Empty()
    self._land_msg = Empty()
    # Get the goal word: UP or DOWN
    takeoff_or_land = goal.goal #goal has attribute named 'goal'. 
if __name__ == '__main__':
 rospy.init_node('action_custom_msg')
 CustomActionMsgClass()
 rospy.spin()

1 Ответ

0 голосов
/ 10 января 2020

Вот пример для переменных уровня объекта и класса.

class A(object):
    Z = 3  # class variable. Upper-case is good code style for class-level variables
           # defined inside the class but outsize of it's methods
    def __init__(self):
        self.x = 1  # object variable
        y = 2       # local variable; it will lost after returning from the function
    def some_method(self):
        self.w = 4  # object variable too
        # Note that it is not recommended to define
        # object variables outside of __init__()

В вашем коде _pub_takeoff - переменная объекта; takeoff_or_land является локальной переменной.

...