2016-07-26 7 views
0
class MyObject1(object): 
    def __init__(self): 
     super(MyObject1, self).__init__() 
     pass 

class MyObject2(object): 
    def __init__(self, arg): 
     super(MyObject2, self).__init__() 
     pass 

ich einen python27 Code wie folgt gelesen habe,Was macht super (MyObject, self) .__ init __() in der Klasse MyObject __init __()?

I ‚super‘ bedeutet Vater Klassenkonstruktors Funktion kennen,

aber ich kann nicht verstehen, warum diese beiden Klassen nennen mich Konstruktorfunktion ‚__init__‘,

scheint es keinen praktischen Effekt zu haben.

+2

Versuchen Sie, eine Klasse zu erweitern, die tatsächlich etwas in der Initialisierung tut, und es wird eine Wirkung haben –

+1

Sind diese beiden tatsächlichen Klassen "in freier Wildbahn" angetroffen und Sie fragen, warum diejenigen verwenden "Super", oder ist die Frage Über was macht 'super.init' im Allgemeinen? –

+0

Es scheint, dass viele Fragen zuvor gestellt wurden: http://Stackoverflow.com/questions/576169/understanding-python-super-with-init-methods und http://stackoverflow.com/questions/222877/how-to- Verwenden Sie Super-in-Python – linrongbin

Antwort

3

Dies sind einige ziemlich grundlegende OO-Methoden in Python. Lesen Sie here.

super und self sind ähnlich:

super() können Sie vermeiden, ausdrücklich auf die Basisklasse beziehen, die schön sein kann. Aber der Hauptvorteil kommt mit mehrfacher Vererbung, , in der alle Arten Spaßsachen geschehen können. Siehe die Standarddokumente auf Super, wenn Sie nicht bereits haben.

(aus dieser answer)

Hier ein Beispiel für super in Aktion ist:

class Foo(object): 
    def __init__(self, frob, frotz): 
      self.frobnicate = frob 
      self.frotz = frotz 

class Bar(Foo): 
    def __init__(self, frob, frizzle): 
      super(Bar, self).__init__(frob, frizzle) 
      self.frotz = 34 
      self.frazzle = frizzle 


bar = Bar(1,2) 
print "frobnicate:", bar.frobnicate 
print "frotz:", bar.frotz 
print "frazzle:", bar.frazzle 

Sie können sehen, dass super die Basisklasse ruft (die Klasse, dass die aktuelle Klasse erbt), gefolgt von einem Zugriffsmodifizierer, Zugriff auf die Basisklasse '.__init__() Methode. Es ist wie self, aber für die Basisklasse.

Testen Sie den Code und es wird mehr Sinn ergeben.

Verwandte Themen