Python中对成员函数的引用

2024-04-18 10:57:02 发布

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

我有一个类似于下面的类,对于我的简单用法很好。你知道吗

但是,以这种方式调用函数意味着它们没有访问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 }
    ]

Tags: 函数nameself权限用法datadef方式
2条回答

由于您没有访问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(some_data)调用

还要注意,您已经定义了太多了。选项作为类数据而不是成员属性。它不需要任何实例化就可以访问,但是您应该让那些阅读您的代码的人清楚地了解您的意图,方法是一致地将它们称为Foo.options,而不是some_instance.options(后者可以工作,但是通过简单地使用它会模糊.options的本质) 误认为实例成员(属性)。你知道吗

相关问题 更多 >