2010-04-06 29 views

Trả lời

45

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ũ .

+0

@thetaiko liệt kê một số thứ khác chỉ có kiểu mới mà bạn nên biết. –

+2

Đố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

3

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.

0

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.

0

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ũ.