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

2024-05-23 18:14:51 发布

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

我正在使用Biopython的Restriction类来执行silico限制性消化。据我所知,为了用某种酶消化某种序列,必须实现.catalyste()方法。你知道吗

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)

我为我预见到自己需要的任何酶应用一个条件。这会占用大量代码行,效率低下。我希望能够在所有可能的酶的限制集合中搜索成员,限制性内切酶. 像这样:

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中呢?你知道吗

关于这个问题的技术措辞让我有点困惑,所以我可能没有准确地解释这个问题。我很乐意回答任何澄清的问题。你知道吗

谢谢


Tags: 方法this条件seqsequencersuserrestriction
2条回答

使用getattr(),例如:

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

简单到:

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) 

相关问题 更多 >