Tôi instantiating một lớp A (mà tôi đang nhập khẩu từ ai đó khác, vì vậy tôi không thể sửa đổi nó) vào lớp học của tôi X.Python: gói phương pháp invocations với trước và sau phương pháp
Có cách nào Tôi có thể chặn hoặc gọi các cuộc gọi đến các phương thức trong A? Tức là, trong đoạn code dưới đây tôi có thể gọi
x.a.p1()
và nhận được đầu ra
X.pre
A.p1
X.post
Nhiều TIA!
class A:
# in my real application, this is an imported class
# that I cannot modify
def p1(self): print 'A.p1'
class X:
def __init__(self):
self.a=A()
def pre(self): print 'X.pre'
def post(self): print 'X.post'
x=X()
x.a.p1()
đúng, nhưng tôi muốn tránh vì chương trình thực sự của tôi bao gồm nhiều phiên bản lớp hơn tôi muốn gói. –
Vâng, hãy gọi trình bao bọc giống nhau, nhưng đặt nó vào không gian tên của riêng bạn. Nó sẽ hoạt động hiệu quả như là một thay thế thả vào, và bạn không phải thay đổi mã của bạn. – Tomalak