首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python传递函数名作为参数

Python传递函数名作为参数
EN

Stack Overflow用户
提问于 2015-11-19 04:23:14
回答 1查看 4K关注 0票数 0

我的目标是编写一个类,使我能够确定调用哪个方法( A1或A2 ),同时创建对象p将调用B,B将调用A。

代码语言:javascript
运行
复制
def A1():
    return 'A1_g'
def A2():
    return 'A2_g'

class test:

    def __init__(self, means=None):
        self.means=means

    def A1(self):
        return 'A1'
    def A2(self):
        return 'A2'
    def B(self,A):
        new_string='methodB called '+A()
        print new_string
    def C(self):
        q=self.B(self.means)
        return q

p=test(means=A1)

p.C()

我得到了一个输出"methodB名为A1_g“。但我想要"methodB,A1“

如果删除最前面的2fn定义,就会得到"NameError: name‘A1“未定义”。想了解如何以及为什么要做到这一点。

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 04:26:20

代码语言:javascript
运行
复制
>>> p = test(means=test().A1)
>>> p.C()
methodB called A1

或者,更简单地说:

代码语言:javascript
运行
复制
>>> test(means=test().A1).C()
methodB called A1

选项:将方法名作为字符串传递

如果我们希望将方法的名称作为字符串传递,而不是传递方法本身,那么我们需要按如下方式更改方法B

代码语言:javascript
运行
复制
    def B(self,A):
        method = getattr(self, A)
        new_string='methodB called ' + method()
        print new_string

getattr函数返回由变量A命名的self属性。

现在,可以按以下方式运行:

代码语言:javascript
运行
复制
>>> p = test(means="A1")
>>> p.C()
methodB called A1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33795241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档