2009-04-01 28 views

Trả lời

124

Vâng, chỉ cần sử dụng tên của phương thức, như bạn đã viết. Các phương thức/hàm là các đối tượng trong Python, giống như bất cứ thứ gì khác và bạn có thể truyền chúng xung quanh cách bạn thực hiện các biến. Trong thực tế, bạn có thể nghĩ về một phương thức (hoặc hàm) như một biến có giá trị là đối tượng mã thực sự có thể gọi được.

FYI, không có phương pháp call - Tôi nghĩ rằng nó được gọi là __call__, nhưng bạn không cần phải gọi nó một cách rõ ràng:

def method1(): 
    return 'hello world' 

def method2(methodToRun): 
    result = methodToRun() 
    return result 

method2(method1) 
+1

Wow, đáng ngạc nhiên đơn giản. –

+1

@MattFletcher Sự đơn giản của Python luôn làm tôi kinh ngạc (đến từ C++). – GHC

+0

@David Z làm cách nào để chuyển đối số trong phương thức 1? – Geek

22

Có nó là có thể. Chỉ cần gọi:

class Foo(object): 
    def method1(self): 
     pass 
    def method2(self, method): 
     return method() 

foo = Foo() 
foo.method2(foo.method1) 
+1

nếu không có ví dụ 'foo'? –

+0

Sau đó, bạn chỉ đơn giản là không cần foo, ví dụ .: 'def method1(): qua def method2 (phương pháp) phương thức hoàn trả() method2 (method1) ' – Tom

5

Có; các hàm (và các phương thức) là các đối tượng lớp đầu tiên trong Python. Các công trình sau đây:

def foo(f): 
    print "Running parameter f()." 
    f() 

def bar(): 
    print "In bar()." 

foo(bar) 

Đầu ra:

Running parameter f(). 
In bar(). 

Những loại câu hỏi là tầm thường để trả lời bằng cách sử dụng thông dịch Python hoặc, đối với nhiều tính năng hơn, các IPython vỏ.

10

Dưới đây là ví dụ của bạn lại bằng văn bản để hiển thị một ví dụ độc lập làm việc:

class Test: 
    def method1(self): 
     return 'hello world' 

    def method2(self, methodToRun): 
     result = methodToRun() 
     return result 

    def method3(self): 
     return self.method2(self.method1) 

test = Test() 

print test.method3() 
2

Phương pháp là đối tượng giống như bất kỳ khác. Vì vậy, bạn có thể vượt qua chúng xung quanh, lưu trữ chúng trong danh sách và dicts, làm bất cứ điều gì bạn thích với họ. Điều đặc biệt về chúng là chúng là các đối tượng có thể gọi được, do đó bạn có thể gọi __call__ trên chúng. __call__ được gọi tự động khi bạn gọi phương thức có hoặc không có đối số, do đó bạn chỉ cần viết methodToRun().

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