Tất cả các phần xây dựng của Python là các lớp con của object
và tôi cũng gặp nhiều lớp do người dùng định nghĩa. Tại sao? Mục đích của lớp học object
là gì? Nó chỉ là một lớp học trống rỗng, phải không?Mục đích của phân lớp lớp "đối tượng" trong Python là gì?
Trả lời
Tóm lại, nó đặt ngựa pony huyền diệu miễn phí.
Trong dài, Python 2.2 và trước đó được sử dụng "lớp kiểu cũ". Chúng là một sự triển khai đặc biệt của các lớp, và chúng có một vài hạn chế (ví dụ, bạn không thể phân lớp các kiểu nội trang). Việc sửa lỗi này là tạo ra một phong cách mới của lớp. Tuy nhiên, làm điều này sẽ liên quan đến một số thay đổi không tương thích ngược. Vì vậy, để đảm bảo rằng mã được viết cho các lớp kiểu cũ sẽ vẫn hoạt động, lớp object
được tạo để hoạt động như một lớp cha cho tất cả các lớp kiểu mới. Vì vậy, trong Python 2.X, class Foo: pass
sẽ tạo một lớp kiểu cũ và class Foo(object): pass
sẽ tạo một lớp kiểu mới.
Trong thời gian dài hơn, hãy xem Guido's Unifying types and classes in Python 2.2. Và, nói chung, bạn nên có thói quen làm cho tất cả các lớp học của bạn theo phong cách mới, bởi vì một số thứ (trang trí @property
là một trong những thứ mà bạn nghĩ đến) sẽ không hoạt động với các lớp học kiểu cũ .
Phải, nhưng nó đánh dấu lớp là lớp new-style. Các lớp học mới phát triển nên sử dụng cơ sở object
vì nó tốn ít chi phí và chứng minh mã của bạn trong tương lai.
Nó có liên quan đến các lớp "kiểu mới". Bạn có thể đọc thêm về điều này tại đây: http://docs.python.org/tutorial/classes.html#multiple-inheritance và cũng tại đây: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
Sử dụng các lớp mới theo phong cách mới sẽ cho phép bạn sử dụng các tính năng mới, linh hoạt và __getattribute __() của Python.
Phiên bản ngắn gọn là các lớp cổ điển, không cần lớp cha, có những hạn chế không thể làm việc xung quanh mà không vi phạm nhiều mã cũ. Vì vậy, họ đã tạo ra khái niệm về các lớp kiểu mới phân lớp từ object
và bây giờ bạn có thể làm những việc thú vị như xác định thuộc tính và phân lớp dict
không còn là một bài tập về đau đớn và lỗi lạ.
Các chi tiết có trong phần 3.3 của các tài liệu Python: New-style and classic classes.
Python 2.2 introduced "new style classes" trong đó có một số tính năng bổ sung so với các lớp học kiểu cũ mà không phân lớp đối tượng. Đối tượng lớp con là cách được chọn để chỉ ra rằng lớp của bạn phải là một lớp kiểu mới, không phải là kiểu cũ.
Câu trả lời ngắn: subclassing object
có hiệu quả làm cho nó một kiểu mới lớp (lưu ý rằng đây là không cần thiết vì tự động bằng Python 3.x)
Đối với chênh lệch giữa new style
lớp học và old style
lớp: xem this stackoverflow question. Đối với câu chuyện hoàn chỉnh: xem this nice writeup on Python Types and Objects.
@thetaiko liệt kê một số thứ khác chỉ có kiểu mới mà bạn nên biết. –
Đối với hậu thế, điều đáng nói đến là các lớp kiểu mới là mặc định trong Python3 và phân lớp 'đối tượng' là không cần thiết. – slightlynybbled