我正在使用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中?
关于这个问题的技术措辞对我来说有点混乱,所以我可能没有准确地解释这个问题。我很高兴回答任何澄清问题。
谢谢
答案 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)