Các Changelog cho Python 2.2 (nơi các lớp học kiểu mới đã được giới thiệu) nói như sau về __new__
chức năng:Tại sao không __new__ trong các lớp kiểu Python mới một phương thức lớp?
__new__
là một phương pháp tĩnh, không phải là một phương pháp lớp. Ban đầu tôi nghĩ rằng nó sẽ phải là một phương pháp lớp học, và đó là lý do tại sao tôi đã thêmclassmethod
nguyên thủy. Thật không may, với các phương thức lớp, upcalls không hoạt động ngay trong trường hợp này, vì vậy tôi đã phải làm cho nó một phương thức tĩnh với một lớp rõ ràng làm đối số đầu tiên của nó.
Tuy nhiên, tôi không thể nghĩ tại sao các phương pháp lớp học sẽ không hoạt động cho mục đích này và chắc chắn sẽ tốt hơn. Tại sao không __new__
kết thúc như là một phương pháp lớp học cuối cùng? Guido nói gì khi nói rằng "upcalls không hoạt động ngay trong trường hợp này"?
@Duncan: Tôi đã cố ý sử dụng 'mới' thay vì '__new__'. Nếu nó không rõ ràng, để lại một bình luận tôi sẽ cố gắng để xây dựng. – jfs
Tôi nghĩ nếu bạn đã sử dụng một cái tên khác biệt hơn một chút so với việc chỉ bỏ dấu gạch dưới, nó sẽ rõ ràng hơn, nhưng bây giờ tôi đã hiểu. – Duncan
Khi nào điều này thực sự là một vấn đề? Nếu bạn muốn một thể hiện của 'subcls', tại sao bạn không gọi' subcls.new() '? Làm theo cách bạn mô tả chỉ có tác dụng không chạy các hàm '__new__' đúng trên' subcls'. – Dolda2000