import inspect
class Foo(object):
pass
if __name__ == '__main__':
print type(Foo.__init__)
print inspect.getsourcelines(Foo.__init__)
Output:Trình bao bọc (wrapper_descriptor) là gì, và tại sao lại là Foo .__ init __() trong trường hợp này?
<type 'wrapper_descriptor'>
Traceback (most recent call last):
*snip*
File "/usr/lib/python2.7/inspect.py", line 420, in getfile
'function, traceback, frame, or code object'.format(object))
TypeError: <slot wrapper '__init__' of 'object' objects> is not a module, class, method, function, traceback, frame, or code object
Googling cho rất ít thông tin hữu ích về những gì, chính xác, một wrapper_descriptor là, và tại sao một lớp trống có một phương pháp __init__
đó không phải là một phương pháp, mà là một wrapper_descriptor.
Chính xác những gì đang xảy ra ở đây? Có phải tất cả các lớp không có phương thức __init__
có một trong các hàm wrapper_descriptor này không? Tại sao có một __init__
trong dict lớp ở tất cả?
Tài liệu C API giải thích một số chi tiết ngoài điều này, nếu bạn quan tâm. Nhưng thông thường bạn không quan tâm đến thực tế là "wrapper slot", "method-wrapper", và tương tự là những thứ mà bạn có thể gọi như thể chúng là các phương thức ràng buộc, các phương thức không liên kết, v.v., nhưng không có bất kỳ Python nào mã nguồn. – abarnert