Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在属于类的函数中定义变量_Python_Class - Fatal编程技术网

Python 在属于类的函数中定义变量

Python 在属于类的函数中定义变量,python,class,Python,Class,在代码中,有一个类具有名为“goal_callback”的函数。在函数中,使用.init前缀定义变量,其他变量通常不使用前缀定义。 我知道,自我。前缀用于使变量成为“类变量”,以便类中的每个函数都可以访问它。所以在代码中,我只有一个函数,如果我们用self定义变量,会有什么不同吗。前缀与否。 “起飞”变量和“起飞”或“着陆”变量之间的差异到底是什么 #! /usr/bin/env python class CustomActionMsgClass(object): def __init__

在代码中,有一个类具有名为“goal_callback”的函数。在函数中,使用.init前缀定义变量,其他变量通常不使用前缀定义。 我知道,自我。前缀用于使变量成为“类变量”,以便类中的每个函数都可以访问它。所以在代码中,我只有一个函数,如果我们用self定义变量,会有什么不同吗。前缀与否。 “起飞”变量和“起飞”或“着陆”变量之间的差异到底是什么

#! /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()

下面是对象级和类级变量的示例

A类(对象):
Z=3#类变量。大写是类级变量的良好代码样式
#在类内部定义,但超出其方法的范围
定义初始化(自):
self.x=1#对象变量
y=2#局部变量;从函数返回后,它将丢失
定义某些_方法(自身):
self.w=4#对象变量也是
#请注意,不建议定义
#在uuu init_uuuu()之外的对象变量

在你的代码中,pub是对象的变量<代码>起飞或着陆是局部变量。

请提供
rospy
的解释/代码。关于.init前缀的知识-它来自哪里?我是说,我从没听说过。你在说什么前缀
\u takeoff\u msg
是一个实例变量:对象的属性
self
<代码>起飞或着陆只是一个与任何特定对象无关的函数局部变量。在某些属性名称中,前导的
\uu
只是一种约定,表示不应在类的某个方法之外直接访问该属性(它不是类的公共接口的一部分)。我在命名前缀时出错,它是“self.”而不是“init”。不过,我纠正了这个问题。谢谢,@chepner对你的评论,它帮助我理解。