如何使用方法名称作为字符串调用方法

时间:2014-12-11 23:57:55

标签: python getattr

我正在使用Biopython的Restriction类来进行计算机限制性消化。据我了解,为了用某种酶消化某个序列,必须实施.catalyze()方法。

digestTuple = Restriction.EcoRI.catalyse(this_seq)  # Or whichever enzyme is desired.

现在我应用条件来查看哪种酶被用作输入。例如:

RS = restrictionSite         # From user
amb = IUPACAmbiguousDNA()
this_seq = Seq(sequence, amb) # sequence from user

if RS == 'EcoRI':
    digestTuple = Restriction.EcoRI.catalyse(this_seq)

我对任何我预见自己需要的酶都适用条件。这会占用大量代码并且效率低下。我希望能够搜索所有可能的酶Restriction.AllEnzymes限制集的成员资格。像这样:

if RS in Restriction.AllEnzymes:
    digestTuble = Restriction.RS.catalyze(this_seq)

else:
    print('Please type in enzyme name correctly')

这个问题是python并不等同于:

RS = "EcoRI" 
digestTuple = Restriction.RS.catalyze(this_seq)

digestTuple = Restriction.EcoRI.catalyze(this_seq) 

因为它试图使用与酶相关的字符串名称而不是实际调用正确的方法。

有没有办法使用搜索所有可能酶的单一条件来调用此方法?

也许这样的Invoking a method by its name但是在python中?

关于这个问题的技术措辞对我来说有点混乱,所以我可能没有准确地解释这个问题。我很高兴回答任何澄清问题。

谢谢

2 个答案:

答案 0 :(得分:4)

简单如下:

getattr(your_object,"methodname")()

示例:

class My_Class:
    def print_hi(self):
        print 'hi'

a = My_Class()

getattr(a,'print_hi')()

输出:

hi

在你的情况下:

RS = "EcoRI" 
digestTuple = getattr(Restriction, RS).catalyze(this_seq) 

答案 1 :(得分:4)

使用getattr(),例如:

RS = "EcoRI"
digestTuple = getattr(Restriction, RS).catalyze(this_seq)