2011-07-13 5 views
19

Tại thời điểm nào các phương thức trong Python có được thuộc tính get? - Ngay khi chúng được định nghĩa trong lớp? Tại sao Python cho phép tôi định nghĩa một phương thức mà không có bất kỳ đối số nào (ngay cả đối số self đầu tiên)?Phương thức, `classmethod` và` staticmethod` được triển khai bằng Python như thế nào?

Tôi biết cách sử dụng classmethodstaticmethod và tôi biết rằng các chức năng này được tích hợp sẵn, nhưng điều gì sẽ xảy ra với một chức năng được trang trí như vậy?

Về cơ bản, tôi tự hỏi về "ma thuật" xảy ra giữa định nghĩa lớp và xây dựng lớp học.

Trả lời

21

Kiểm tra điều này.

http://docs.python.org/howto/descriptor.html#static-methods-and-class-methods

Bạn cũng có thể có một cái nhìn vào mã nguồn cho các đối tượng lớp và phương pháp tĩnh, trong funcobject.c:

http://hg.python.org/cpython/file/69b416cd1727/Objects/funcobject.c

Lớp định nghĩa phương pháp đối tượng bắt đầu từ ngày dòng 694, trong khi định nghĩa đối tượng phương thức tĩnh bắt đầu trên dòng 852. (Tôi thấy nó khá hài hước khi chúng có các mục có tiêu đề "method" trong funcobject.c khi methodobject.c cũng tồn tại.)

+3

Ah, rất hay để hiển thị Python imple lời khuyên. –

+0

Vui vì tôi có thể giúp đỡ. – JAB