Trong mô-đun a.pyphương pháp mô-đun Gán cho một biến lớp hoặc Instance biến
def task():
print "task called"
a = task
class A:
func = task # this show error unbound method
#func = task.__call__ # if i replace with this work
def __init__(self):
self.func_1 = task
def test_1(self):
self.func_1()
@classmethod
def test(cls):
cls.func()
a()
A().test_1()
A.test()
Output:
task called
task called
Traceback (most recent call last):
File "a.py", line 26, in <module>
A.test()
File "a.py", line 21, in test
cls.func()
TypeError: unbound method task() must be called with A instance as
first argument (got nothing instead)
Trong mô-đun, tôi có thể dễ dàng gán một chức năng để một biến. Khi lớp bên trong cố gắng gán hàm cấp mô-đun cho biến lớp func = task nó hiển thị lỗi, để loại bỏ lỗi này, tôi phải thay thế nó bằng func = task .__ call__ Nhưng khi tôi gán cho ví dụ biến công việc của nó là . func_1 = task.
Câu hỏi của tôi là: tại sao tôi không thể gán hàm cấp mô-đun cho biến lớp học mà không có __call__ và khi chức năng tương tự tôi có thể gán cho biến mẫu đang hoạt động.
Ngoài ra, cần lưu ý rằng điều này biên dịch và hoạt động như mong đợi trong python 3.x (cụ thể là 3.6). – Ori