2010-10-17 31 views
27

Trong python, nói rằng tôi có một chuỗi có chứa tên của một hàm lớp mà tôi biết một đối tượng cụ thể sẽ có, làm thế nào tôi có thể gọi nó?Python - Làm thế nào để gọi một hàm trên một đối tượng động theo tên?

Đó là:

obj = MyClass() # this class has a method doStuff() 
func = "doStuff" 
# how to call obj.doStuff() using the func variable? 
+1

tôi tò mò về lý do tại sao bạn sẽ cần phải làm điều này. Điều này nghe có vẻ như bạn có thể làm điều gì đó một cách khó khăn. Bạn có thể giải thích về tình hình của bạn? – JoshD

+0

Tôi có một ứng dụng cli nơi tôi muốn chấp nhận các lệnh từ dòng lệnh, nhưng không muốn làm điều gì đó như: "if command = 'doThing' thì obj.doThing() elseif command = 'someOtherThing' ... và Tôi muốn thêm các phương thức vào lớp trình xử lý và sau đó chúng sẽ tự động có sẵn trên cli –

+0

là có thể làm điều đó không? tình huống này sẽ không phải là một ý tưởng tốt? Tôi cũng ở trong tình huống tương tự, nhưng tôi không chắc chắn nếu tôi sẽ đi theo cách này.bằng cách nào đó, tôi cảm thấy rằng nó sẽ được rõ ràng hơn nếu tôi sử dụng một cách rõ ràng phân nhánh thay vào đó.bạn nghĩ gì? cảm ơn! – ultrajohn

Trả lời

44

Sử dụng "getattr": http://docs.python.org/library/functions.html?highlight=getattr#getattr

obj = MyClass() 
try: 
    func = getattr(obj, "dostuff") 
    func() 
except AttributeError: 
    print "dostuff not found" 
+0

Liên kết này cũng có một ví dụ hữu ích và quan trọng của câu hỏi trên https://gist.github.com/hygull/41f94e64b84f96fa01d04567e27eb46b –

Các vấn đề liên quan