Tôi đang bối rối về hành vi của phạm vi này:lạ chức năng Python phạm vi hành vi
class Bar:
def __init__(self):
for fn in ["open","openW","remove","mkdir","exists","isdir","listdir"]:
print "register", fn
def func_wrapper(filename):
print "called func wrapper", fn, filename
setattr(self, fn, func_wrapper)
bar = Bar()
bar.open("a")
bar.remove("b")
bar.listdir("c")
này cho kết quả:
register open
register openW
register remove
register mkdir
register exists
register isdir
register listdir
called func wrapper listdir a
called func wrapper listdir b
called func wrapper listdir c
Nhưng tôi lại có thể ngờ rằng func_wrapper
sẽ luôn là chức năng chính xác. Tôi biết rằng phạm vi của func_wrapper
là toàn bộ chức năng nhưng tôi xác định lại nó trong mỗi vòng lặp lặp lại và trường hợp cuối cùng đã được lưu đi trong attrib. Tôi cũng đã cố gắng để thêm func_wrapper = None
dưới đây setattr
nhưng điều đó không giúp (cũng sẽ tự hỏi tôi ...).
Tôi có bị mù không? Tôi thậm chí không thực sự thấy cách làm việc xung quanh/sửa lỗi này.
@heltonbiker: Bạn có thể xây dựng không? Làm thế nào tôi nên sử dụng một dict thay vì ở đây? Và tại sao? – Albert
Tôi đã đọc kỹ hơn và đã xóa nhận xét trước đó. – heltonbiker