2011-09-05 40 views
7

Trong một trong những câu hỏi quá khứ của tôi, một người trả lời gợi ý với tôi rằng nó là tốt hơn để kế thừa từ đối tượng khi lớp bạn muốn tạo cũng giống như từ đầu, mà không cần phải kế thừa từ lớp khác.tại sao kế thừa từ đối tượng loại

Ví dụ, giống như những gì tôi luôn luôn làm:

class my_class: 
    "a class inherits from nothing" 
    def __init__(self): 
     pass 

Đối với những gì anh ta hoặc cô đề nghị:

class suggested_class(object): 
    "a class inherits from object type" 
    def __init__(self): 
     pass 

Tôi đang bối rối với những lợi ích hoặc bất lợi từ cả hai phương pháp.

Câu hỏi 1:

Vì vậy, ý tưởng của bạn là gì, kế thừa từ loại đối tượng hoặc không có gì?

+2

xem http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html#SECTION000310000000000000000 – wim

+0

Như Marcello đề cập, nếu bạn có hai câu hỏi, hãy giới hạn bài đăng này thành một câu hỏi và [ đăng câu hỏi khác] (http://stackoverflow.com/questions/ask) cho người khác. – SingleNegationElimination

+0

Bạn có thể xem 'dir (my_class) 'và' dir (proposal_class) '. Hơn nữa, như đã đề cập dưới đây, cả hai sẽ giống nhau trong Python3. – steabert

Trả lời

5

Thừa hưởng từ không có gì tạo ra một lớp kiểu cũ, trong đó có hành vi khác nhau đến các lớp học kiểu mới. Bây giờ tôi không nhớ các chi tiết cụ thể (xem here để giải thích), nhưng theo nguyên tắc chung, không có lý do gì để ưu tiên các lớp kiểu cũ, vì vậy bạn nên luôn kế thừa từ đối tượng (nếu không có gì khác).

+4

Lý do để có các lớp kiểu mới là 1: các kiểu của tất cả các phiên bản kiểu cũ là 'classobj', không phải là rất thú vị, và thứ tự độ phân giải 2: trên các lớp kiểu cũ đã bị hỏng cho đa thừa kế. Việc sửa một hoặc cả hai vấn đề này sẽ làm cho rất nhiều mã ngừng hoạt động, do đó, điều đơn giản nhất để làm là tạo một loại lớp khác, do đó 'đối tượng'. – SingleNegationElimination

+1

@Token Ngoài ra, trong Python 3, tất cả các lớp đều trở lại là kiểu mới mà không cần kế thừa cụ thể từ 'đối tượng'. – Keith

+0

Vâng, các lớp phong cách cũ đã bị hỏng, và py3 cố tình phá vỡ tính tương thích ngược, vì vậy đó là thời gian tuyệt vời để thực hiện bước nhảy. – SingleNegationElimination

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