Làm cách nào để bạn có thể tạo phương thức lớp tĩnh sau khi lớp được xác định? Nói cách khác, tại sao trường hợp thứ ba thất bại?Tạo staticmethod từ phương thức hiện có bên ngoài lớp học? (lỗi "phương pháp không liên kết")
>>> class b: ... @staticmethod ... def foo(): ... pass ... >>> b.foo() >>> class c: ... def foo(): ... pass ... foo = staticmethod(foo) ... >>> c.foo() >>> class d: ... def foo(): ... pass ... >>> d.foo = staticmethod(d.foo) >>> d.foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method foo() must be called with d instance as first argument (got nothing instead)
Không nên là 'd.foo.im_func'? –
Vâng, cảm ơn. Đã sửa! – kindall
Vâng, bạn cần đánh dấu chúng bằng 'staticmethod' để gọi chúng tương đương với các cá thể, không chỉ riêng lớp đó. 'd.foo()' làm việc có hoặc không có gói 'staticmethod', nhưng' d(). foo() 'sẽ phát nổ (nó sẽ cố gắng truyền' self' mà 'foo' không chấp nhận). Chắc chắn, không có tính năng liên quan đến cá thể nào cần gọi chúng trên một cá thể, nhưng đối với DRY, các phương thức tham chiếu phương thức tĩnh có thể và nên gọi nó là 'self.foo()' thay vì đặt tên lớp một cách rõ ràng. – ShadowRanger