Python从string生成函数名称

时间:2017-12-06 10:15:42

标签: python string function class object

我想使用基于参数传递的字符串的函数,如下所示。代码给出以下错误:AttributeError:' Obj'对象没有属性' funA'

funA和funB的功能是在fun中定义的,因为它们只在乐趣中使用

class Obj(object):
    def __init__(self):
        self.A = 2
        self.B = 3

    def fun(self, ar):
        def funA(self):
            print self.A

        def funB(self):
            x = self.B + 4
            print self.B

        for letter in ar:
            name = 'fun' + letter
            getattr(self, name)()

obj_instance = Obj()
obj_instance.fun(['A', 'B'])

2 个答案:

答案 0 :(得分:1)

作为替代方案,您可以尝试以下代码。它使您有机会检查函数是否存在。

class Obj(object):
    def __init__(self):
        self.A = 2
        self.B = 3

    def fun(self, ar):
        def funA():
            print self.A

        def funB():
            x = self.B + 4
            print self.B
            print x

        for letter in ar:
            name = 'fun' + letter
            if name in locals():
                locals()[name]()

obj_instance = Obj()
obj_instance.fun(['A', 'B'])

答案 1 :(得分:0)

我不推荐它,但如果你真的需要它,那么你可以这样做:

import boto3

# Create SQS client
sqs = boto3.client('sqs',region_name='eu-west-1')

queue_url='https://sqs.eu-west-1.amazonaws.com/XXXX'

# Receive message from SQS queue
response = sqs.receive_message(
    QueueUrl=queue_url,
    AttributeNames=[
        'SentTimestamp'
    ],
    MaxNumberOfMessages=10,
    MessageAttributeNames=[
        'All'
    ],
    VisibilityTimeout=0,
    WaitTimeSeconds=0
)

exec()执行放在括号中的任何字符串,就像它是python代码一样。