2012-12-11 36 views
20

thể trùng lặp:
Old style and new style classes in Pythonkiểu cũ và kiểu mới trong Python 2.7?

tình trạng hiện tại của các vấn đề với các lớp học kiểu mới và kiểu cũ bằng Python 2.7 là gì? Tôi không làm việc với Python thường xuyên nhưng tôi mơ hồ nhớ vấn đề. Tài liệu dường như không đề cập đến vấn đề gì cả: The Python Tutorial: Classes. Tôi vẫn cần phải lo lắng về điều này? Nói chung, tôi nên khai báo lớp học của mình như:

class MyClass: 
    pass 

hoặc?

class MyClass(object): 
    pass 
+2

@LennartRegebro: câu hỏi đã được trong năm 2008, với câu trả lời được chấp nhận cũng trong năm 2008. Tôi đã hỏi tình hình trong năm 2012 với Python 2.7 là gì. Câu trả lời là không rõ ràng đối với tôi khi đọc câu hỏi đó. – User

+0

Bạn có lý do gì để nghĩ rằng câu trả lời sẽ thay đổi từ Python 2.6 sang Python 2.7? Mặc dù điều đó không quan trọng. Dù lý do của bạn là để đăng câu hỏi này, nó là một bản sao chính xác. –

+0

@LennartRegebro: Có 4 năm là rất nhiều thời gian, rất nhiều thứ có thể thay đổi. Không nhận ra Python 2.6 là 4 năm trước. – User

Trả lời

21

Luôn phân lớp "đối tượng". Đó là những lớp phong cách mới.

  • Bạn đã sẵn sàng cho python 3 theo cách đó.

  • Những thứ như .super() hoạt động bình thường theo cách đó, nếu bạn cần chúng.

+6

Chưa kể đến các phương thức trang trí ('@ property',' @ classmethod' và '@ staticmethod') chỉ làm việc với các lớp học theo phong cách mới. –

+3

Bạn không thể làm 'lớp MyClass:' trong py3 và nó vẫn là một lớp phong cách mới mặc dù ?? – GP89

+0

@ GP89: Có, trong Python 3. –

9

Bạn nên luôn sử dụng các lớp kiểu mới. Các lớp kiểu mới là một phần của nỗ lực để thống nhất các kiểu dựng sẵn và các lớp do người dùng định nghĩa trong ngôn ngữ lập trình Python.

các kiểu class mới có nhiều điều để cung cấp như:

  • Thuộc tính: Thuộc tính được định nghĩa bởi get/phương pháp thiết lập
  • phương pháp tĩnh và phương pháp lớp
  • mới getAttribute móc, trong đó, không giống như getattr, được gọi là cho mọi quyền truy cập thuộc tính, không chỉ khi thuộc tính không thể là được tìm thấy trong ví dụ
  • Phần mô tả: Một giao thức để xác định hành vi của các truy cập thuộc tính thông qua đối tượng
  • Trọng constructor mới
  • metaclasses

Source.

Các vấn đề liên quan