Tôi đang gặp sự cố khi thay thế một chức năng từ một mô-đun khác với chức năng khác và điều đó khiến tôi phát điên.Làm thế nào để một con khỉ vá một hàm trong python?
Hãy nói rằng tôi có một mô-đun bar.py trông như thế này:
from a_package.baz import do_something_expensive
def a_function():
print do_something_expensive()
Và tôi có một mô-đun đó trông như thế này:
from bar import a_function
a_function()
from a_package.baz import do_something_expensive
do_something_expensive = lambda: 'Something really cheap.'
a_function()
import a_package.baz
a_package.baz.do_something_expensive = lambda: 'Something really cheap.'
a_function()
tôi mong chờ để có được kết quả:
Something expensive!
Something really cheap.
Something really cheap.
Nhưng thay vào đó tôi có được điều này:
Something expensive!
Something expensive!
Something expensive!
Tôi đang làm gì sai?
Điều thứ hai không thể làm việc, bởi vì bạn chỉ cần xác định lại ý nghĩa của do_something_expensive trong phạm vi địa phương của bạn. Tuy nhiên, tôi không biết tại sao cái thứ ba không hoạt động ... – pajton
Như Nicholas giải thích, bạn đang sao chép một tham chiếu và chỉ thay thế một trong các tham chiếu. 'từ mô-đun nhập khẩu non_module_member' và vá lỗi cấp mô-đun không tương thích vì lý do này và cả hai đều tránh được tốt nhất. – bobince
Đề án đặt tên gói ưu tiên là chữ thường không có dấu gạch dưới, tức là 'apackage'. –