Python中对成员函数的引用
我有一个类似于下面的类,它适合我的简单用法 但是,以这种方式调用函数意味着它们无权访问Python中对成员函数的引用,python,Python,我有一个类似于下面的类,它适合我的简单用法 但是,以这种方式调用函数意味着它们无权访问self.,因此我不能使用任何其他成员函数或变量。请注意,某些项共享相同的回调 是否有更好的方法引用或调用函数,以便我可以访问与self相关的其他项目 class Foo: def dostuff(self, bar): # ... # Do stuff with input data, occasionally invoking the right callback
self.
,因此我不能使用任何其他成员函数或变量。请注意,某些项共享相同的回调
是否有更好的方法引用或调用函数,以便我可以访问与self
相关的其他项目
class Foo:
def dostuff(self, bar):
# ...
# Do stuff with input data, occasionally invoking the right callback
# function like so:
self.options[i]['func'](mydata)
def callback1(data):
pass
def callback2(data):
pass
options = [
0x10: { 'name': 'cat', 'func': callback1 },
0x20: { 'name': 'dog', 'func': callback2 },
0x40: { 'name': 'emu', 'func': callback2 },
0x80: { 'name': 'bat', 'func': callback2 }
]
由于您没有访问self的权限,因此需要推迟查找该方法。您可以在
dostuff
中按名称查找:
class Foo:
def dostuff(self, bar):
# ...
# Do stuff with input data, occasionally invoking the right callback
# function like so:
method = getattr(self, self.options[i]['func'])
method(mydata)
def callback1(self, data):
pass
def callback2(self, data):
pass
options = [
0x10: { 'name': 'cat', 'func': 'callback1' },
0x20: { 'name': 'dog', 'func': 'callback2' },
0x40: { 'name': 'emu', 'func': 'callback2' },
0x80: { 'name': 'bat', 'func': 'callback2' }
]
您的成员函数需要包含“self”参数,即使它们仅用于自调度调用 换言之,您需要类似以下内容:
#!/bin/python
# ...
class ...
def callback(self, data):
# ...
。。。需要使用self.callback(一些数据)
还要注意,您也将.options定义为类数据,而不是成员属性。它不需要任何实例化就可以访问,但是你应该让那些阅读你的代码的人清楚你的意图,一致地将它们称为Foo.options
,而不要称为某个实例.options
(后者会起作用,但会通过简单的引用来模糊.options的本质)
误认为是实例成员(属性)。别忘了在回调中添加
self
参数。感谢这一点,完全有道理。感谢你的第二点,我现在明白了。不过,我丢失的砰砰声是由Ned解释的,特别是他推迟了查找。