Tôi đang viết một trang trí và vì nhiều lý do gây phiền nhiễu khác nhau, hãy kiểm tra xem hàm đang gói có được định nghĩa độc lập hay là một phần của lớp hay không subclassing).Python: một người trang trí có thể xác định xem một hàm đang được định nghĩa bên trong một lớp không?
Ví dụ:
def my_decorator(f):
defined_in_class = ??
print "%r: %s" %(f, defined_in_class)
@my_decorator
def foo(): pass
class Bar(object):
@my_decorator
def bar(self): pass
nên in:
<function foo …>: False
<function bar …>: True
Ngoài ra, xin lưu ý:
- Tại trang trí điểm được áp dụng chức năng vẫn sẽ là một chức năng, không phải một phương pháp không liên kết, vì vậy việc kiểm tra phương pháp ví dụ/không liên kết (sử dụng
typeof
hoặcinspect
) sẽ không t làm việc. - Vui lòng chỉ cung cấp các đề xuất giải quyết vấn đề này - Tôi biết rằng có nhiều cách tương tự để thực hiện kết thúc này (ví dụ: sử dụng trình trang trí lớp học), nhưng tôi muốn chúng xuất hiện ở thời điểm trang trí không muộn hơn.
[0]: cụ thể, tôi viết một trình trang trí giúp bạn dễ dàng thực hiện kiểm tra tham số với nose
. Tuy nhiên, nose
sẽ không chạy trình phát thử nghiệm trên các lớp con unittest.TestCase
, vì vậy tôi muốn trang trí của tôi có thể xác định xem nó được sử dụng bên trong lớp con của TestCase
và không có lỗi thích hợp. Giải pháp rõ ràng - sử dụng isinstance(self, TestCase)
trước khi gọi chức năng gói không hoạt động, bởi vì chức năng được gói cần làm máy phát, không được thực hiện tại tất cả.
Đối với những người tò mò, đây là kết quả: http://paste.pocoo.org/show/532430/ –