2009-12-06 4 views
21

파이썬 클래스가 있고 변수에 따라 함수를 호출하고 싶다면 어떻게해야합니까? 나는 다음과 같이 할 수 있다고 상상했다 :문자열에서 메서드 호출

class CallMe: # Class 

    def App(): # Method one 

     ... 

    def Foo(): # Method two 

     ... 

variable = "App" # Method to call 

CallMe.variable() # Calling App() 

그러나 그것은 할 수 없었다. 다른 방법이 있나요?

+1

'variable'에 어떤 값을 넣을 지 어떻게 결정합니까? –

+0

파일에 전달 된 인수를 사용합니다. :) – Sirupsen

답변

57

이 작업을 수행 할 수 있습니다

getattr(CallMe, variable)() 

getattr IT는이 객체의 기인 명명의 값을 반환하는 내장 방법이다. 이 경우의 값은()로 호출 할 수있는 메소드 객체입니다

+1

값이''CallMe ''인 문자열을 가지고 있다면 어떻게해야합니까? – Y2H

3

코드가 파이썬처럼 보이지 않습니다. 이렇게하고 싶습니까?

class CallMe: 

    def App(self): #// Method one 
     print "hello" 

    def Foo(self): #// Method two 
     return None 

    variable = App #// Method to call 

CallMe().variable() #// Calling App() 
1

getattr을 사용하거나 변수에 바운드 또는 언 바운드 메소드를 할당 할 수 있습니다. 바운드 메소드는 클래스의 특정 인스턴스와 연결되어 있으며 언 바운드 메소드는 클래스에 연결되어 있으므로 첫 번째 매개 변수로 인스턴스를 전달해야합니다.

class CallMe: 
    def App(self): 
     print "this is App" 

    def Foo(self): 
     print "I'm Foo" 

obj = CallMe() 

# bound method: 
var = obj.App 
var()   # prints "this is App" 

# unbound method: 
var = CallMe.Foo 
var(obj)  # prints "I'm Foo" 
1

클래스가 "구식 클래스"로 선언되었습니다. 모든 수업을 "새로운 스타일의 수업"으로 만드는 것이 좋습니다.

이전 버전과 새로운 버전의 차이점은 새로운 스타일의 클래스가 상속을 사용할 수 있다는 것입니다. 그러나 들어가는 것이 좋은 습관입니다.

새로운 스타일의 클래스를 만들기 위해해야 ​​할 일은 다음과 같습니다. 파이썬 구문을 사용하여 "object"에서 상속 받았다고 말하면됩니다. 클래스 이름 다음에 괄호를 넣고 괄호 안에 이라는 객체를 넣으면됩니다.. 그래서 같이 : 내가 말했듯이

class CallMe(object): # Class 

    def App(): # Method one 

     ... 

    def Foo(): # Method two 

     ... 

, 당신은 바로 상속을 사용할 필요가 없을 수도 있지만,이에 얻을 수있는 좋은 습관이다. StackOverflow에 대한 몇 가지 질문이 "X을 시도하고 있는데 작동하지 않습니다"라는 효과가 있습니다. 이전 스타일의 클래스를 코딩 한 사람이 나타났습니다.