2011-09-05 4 views
7

Geçmişteki sorularımdan birinde, bir yanıt veren, oluşturmak istediğiniz sınıf sıfırdan farklı olduğunda, başka sınıftan miras almanıza gerek olmadığı zaman, nesneden miras almanın daha iyi olduğunu önerir.nesne türünden devralınan neden

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

o önerdi Ne için:

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

ben hem yaklaşımlardan fayda veya dezavantaj ile karıştı hep yapmak ne gibi Örneğin

.

Soru 1:

Yani senin fikrin nedir, nesne türü veya yoktan devralan?

+2

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

+0

Marcello'dan bahseder gibi, iki sorunuz varsa, lütfen bu gönderiyi tek bir soruyla sınırlayın ve [ başka bir soru göndermek] (http://stackoverflow.com/questions/ask) diğeri için. – SingleNegationElimination

+0

'dir (my_class)' ve 'dir (suggest_class)' a bakabilirsiniz. Ayrıca, aşağıda belirtildiği gibi, her ikisi de Python3'te aynı olacaktır. – steabert

cevap

5

Hiçbir şeyden miras alma, yeni stil sınıflarına farklı davranışları olan eski bir stil oluşturur. Şu andaki özellikleri hatırlamıyorum (bir açıklama için bkz. here), ama genel bir kural olarak, eski stil sınıflarını desteklemenin bir nedeni yoktur, bu yüzden her zaman nesneden miras almalısınız (eğer başka bir şey yoksa).

+4

Yeni stil sınıflarına sahip olmanın nedeni 1'dir: eski stil sınıflarının tüm örneklerinin türleri çok ilginç olmayan "classobj" idi ve 2: eski stil sınıflarında yöntem çözüm sırası, birden fazla kalıtım için bozuldu. Bu sorunlardan birini veya her ikisini birden gidermek, mevcut kodların çalışmasının çok fazla yapılmasına yol açacaktı, bu yüzden yapılacak en basit şey, farklı bir sınıf, yani 'nesne' yapmaktı. – SingleNegationElimination

+1

@Token Ayrıca, Python 3'te, tüm sınıflar, özellikle "object" öğesinden devralınma olmaksızın yeni stil olmaya geri döndüler. – Keith

+0

Eski stil sınıfları kırıldı ve py3 geriye dönük uyumluluğun kasıtlı olarak kırılmasını sağladı, bu yüzden atlama yapmak için harika bir zaman. – SingleNegationElimination