2014-12-11 3 views
3

Biopython의 Restriction 클래스를 사용하여 in silico 제한 사항 소화를 수행하고 있습니다. 특정 효소로 특정 서열을 소화시키기 위해서는 .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) 

나는 내가 필요로하는 효소에 조건을 적용한다. 이것은 일련의 코드 라인을 차지하며 비효율적입니다. 가능한 모든 효소에 대한 Restrictions 세트의 회원을 검색 할 수 있기를 바랍니다 .AllEnzymes. 이런 식으로 뭔가가 :

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

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

이 문제는 파이썬이 동일시하지 않는다는 것입니다 :

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

digestTuple = Restriction.EcoRI.catalyze(this_seq) 

으로는 효소와 관련된 문자열 이름을 사용하려고 따라와 실제로 적절한 메소드를 호출하지 않습니다.

모든 가능한 효소를 검색하는 단일 조건을 사용하여이 방법을 호출 할 수있는 방법이 있습니까?

아마도 Invoking a method by its name과 비슷하지만 파이썬에서는 무엇인가요?

이 질문과 관련된 기술 문구는 다소 혼란 스럽기 때문에 문제를 정확하게 설명하지는 못했습니다. 불만은 어떤 명확한 질문에도 행복하게 대답합니다.

감사합니다

+2

http://stackoverflow.com/questions/17734618/dynamic-method-call-in-python-2-7-using-strings-of-method -names/17734692 # 17734692 아마도? –

답변

4

사용 getattr(), 예를 들면 :

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

답변과 의견은 완벽하게 감사했습니다! 나는 머리로 두 번째 발언을 이겼다고 생각하기 때문에 나는 고개를 끄덕였다. 고맙습니다! – Malonge

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) 
관련 문제