2016-04-16 4 views
0

Ну я пытаюсь сделать это:Ошибка пропускание имени методы в качестве аргумента в методе класса

class Foo(object): 
    def method1(self): 
     print "method1" 
    def method2(self): 
     print "method2"   

class Fo1(object): 
    def __init__(self): 
     self.a = Foo() 
    def classMethod(self, selection): 
     self.a.selection() 

A = Fo1() 
A.classified('method2') 

Я получил эту ошибку:

--> AttributeError: 'Fo1' object has no attribute 'selection'

Я не хочу использовать это (мне кажется, больше кодирования):

def classified(self,selection): 
    if selection == "method1": self.a.method1() 
    elif selection == "method2": self.a.method2() 

Как мне закодировать метод, чтобы я мог пройти имя метода в качестве аргумента? Спасибо!

+2

'getattr (self.a, selection)()'. –

+2

Существует редко причина на самом деле делать это. Вы можете передать ссылку на метод напрямую: 'A.classMethod (Foo.method2)' – chepner

+0

, который вы называете классифицированным, где вы, похоже, называете classMethod. то есть вы используете classMethod и классифицируете взаимозаменяемо. выберите одно имя. – dbliss

ответ

3

Вы можете использовать getattr, чтобы сделать это, например.

def classMethod(self, selection): 
    getattr(self.a, selection)() 

getattr принимает объект имя атрибута и возвращает атрибут, который вы можете позвонить.

+0

Спасибо за ваши предложения! – froycard

Смежные вопросы