2008-09-10 35 views

Trả lời

33
def isbound(method): 
    return method.im_self is not None 

def instance(bounded_method): 
    return bounded_method.im_self 

User-defined methods:

Khi một đối tượng phương pháp dùng định nghĩa được tạo bằng cách lấy một người dùng xác định đối tượng chức năng từ một lớp học, nó im_self thuộc tính là None và đối tượng phương thức được cho là không bị ràng buộc. Khi được tạo bằng cách truy xuất đối tượng hàm do người dùng định nghĩa từ lớp qua một trong các trường hợp của nó, thuộc tính im_self của nó là đối tượng và đối tượng phương pháp được cho là bị ràng buộc. Trong cả hai trường hợp, thuộc tính im_class của phương thức mới là lớp từ , quá trình truy xuất diễn ra và thuộc tính im_func của nó là đối tượng hàm gốc .

Trong Python 2.6 and 3.0:

phương pháp sơ thẩm đối tượng có thuộc tính mới cho đối tượng và chức năng bao gồm phương pháp; từ đồng nghĩa mới cho im_self__self__im_func cũng có sẵn dưới dạng __func__. Tên cũ vẫn được hỗ trợ trong Python 2.6 nhưng đã biến mất trong 3.0.

7

Trong python 3 thuộc tính __self__chỉ đặt trên phương pháp được liên kết. Nó không được đặt thành None trên các hàm thuần túy (hoặc các phương thức không liên kết, chỉ là các hàm thuần túy trong python 3).

Sử dụng một cái gì đó như thế này:

def is_bound(m): 
    return hasattr(m, '__self__') 
Các vấn đề liên quan