2012-10-03 29 views
21

uzatmak için:nasıl bir temel sınıf oluşturduk Python sınıf init

class Thing(): 
    def __init__(self, name): 
     self.name = name 

Ben sınıfını genişletmek ve bu SubThing hem name ve time özelliğine sahiptir, böylece init yöntemine eklemek istiyorum. Nasıl yaparım?

class SubThing(Thing): 
    # something here to extend the init and add a "time" property 

    def __repr__(self): 
     return '<%s %s>' % (self.name, self.time) 

Herhangi bir yardım harika olurdu.

cevap

27

:

class SubThing(Thing): 
    def __init__(self, *args, **kwargs): 
     super(SubThing, self).__init__(*args, **kwargs) 
     self.time = datetime.now() 

olun super gibi olsa object adresinin temel sınıf alt sınıfı olduğundan emin eski stil sınıflarıyla çalışmaz:

class Thing(object): 
    ... 
+14

Ayrıca 'subThing '' süper 'ye başvurmak yerine,' super (self .__ class__, self) .__ 'init __ (* args, ** kwargs)' dır. Bu, 'type()' işlevini kullanarak dinamik olarak oluşturulan sınıflarla da çalışır. – miki725

+3

Bu hatayı bu çözümlerden biriyle alıyorum: 'TypeError: tip olmalı, classobj' değil - hata süper hattım tarafından tetikleniyor. – TheChymera

+1

@TheChymera, Jesse'nin yazdığı şeye bak: "Süper, eski stil sınıflarıyla çalışmadığı için, temel sınıf alt sınıfınızı nesneden aldığınızdan emin olun" – Acsisr

1

SubThing numaralı telefona başka bir __init__ yöntemi yazmalı ve ardından alanlarını başlatmak için üst sınıfın yapıcısını çağırmalısınız. Sadece alt sınıfta __init__ tanımlamak ve uygun ebeveyn __init__ yöntemleri çağırmak için super çağırabilir

This Q&A should provide you some more examples.

İlgili konular