2016-11-04 2 views
-2

Ich bin ziemlich neu in OOP in Python (Version 3.5). Ich habe eine generische Klasse erstellt und möchte eine neue davon erstellen.Übergeben von Klassenargumenten, die in der Elternklasse definiert sind, von der Kindklasse, die den Elternteil erbt

Meine Elternklasse (sagen A) hat zwei Args innerhalb seiner __init__() Methode definiert. Wie kann ich diese in meiner Kindklasse erben (sagen wir B), so dass, wenn ich B instanziiere ich es die Argumente übergeben kann, die ich an A weitergeben würde? Ich versuche tatsächlich, die super() Funktion zu verwenden, aber ich bin über das Ergebnis nicht ganz sicher.

habe ich versucht, die unten, aber es gibt mir TypeError: __init__() takes 1 positional argument but 3 were given

class A(): # parent class 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class B(A): # child class 
    def __init__(self): 
     super().__init__(x, y) 

Und dann würde ich tun (zB) b = B(5, 5)

EDIT 1

Als meine Frage als Duplikat identifiziert wurde von this answer, würde ich sagen, warum es anders ist und warum diese Antwort mir nicht geholfen hat, mein Problem zu lösen:

Ich frage nicht, wie man auf die Parameter einer Elternklasse von einer Kindklasse zugreift, aber wenn es möglich ist, eine Klasse mit einer geerbten Elternklasse zu instanziieren, übergibt sie die Argumente, als ob es ein Aufruf an die Elternklasse.

Die Antwort ist "Ich kann nicht", es sei denn, ich definiere wieder die gleichen Argumente in der Kindklasse __init__() Methode. Schließlich, wie gesagt, ich bin neu in OOP, die angegebene Antwort war nicht hilfreich, da die anfängliche Frage zu schwer für mich zu verstehen war (und es ist nicht einmal in Python).

+1

können Sie nicht. Sie müssen die Parameter angeben, die eine Funktion benötigt. 'B .__ init() __' muss die Signatur haben, mit der Sie es aufrufen. –

+0

ok, also muss ich etwas wie classB (A) machen: def __init __ (selbst, x, y) super() .__ init __ (x, y) wenn ich dies tun muss, oder schreibe die Elternklasse um. – umbe1987

+0

Das ist richtig. –

Antwort

0
class A(): # parent class 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class B(A): # child class 
    def __init__(self, x, y): 
     A.__init__(self, x, y) 

So, jetzt können Sie b = B verwenden (5, 5)

+0

Verwende nicht explizit die Elternklasse, benutze 'super()'. –

+0

Ich verwende gerne explizit, es sei denn, Sie haben ein vernünftiges Argument, dies nicht zu tun, bitte überarbeiten Sie Ihre Kommentare. –

+1

Die explizite Verwendung des übergeordneten Elements sollte eher die Ausnahme als die Regel sein. Was ist, wenn sich das Elternteil ändert? Oder wenn Sie mehrere Vererbungsebenen haben? Dies macht Ihren Code weniger flexibel und weniger idiomatisch. –

Verwandte Themen