Cython Verwendung von cinit()
Habe ich:
cdef class BaseClass():
def __cinit__(self,char* name):
print "BaseClass __cinit__()"
#...
def __dealloc__():
print "BaseClass __dealloc__()"
#...
cdef class DerClass(BaseClass):
def __cinit__(self,char* name,int n):
print "DerClass __cinit__()"
#...
def __dealloc__():
print "DerClass __dealloc__()"
#...
wenn ich Anrufe, die DerClass in cyhton passieren, dass die construcor der BaseClass wird automatisch aufgerufen,was zu drucken ist:
BaseClass __cinit__()
DerClass __cinit__()
DerClass __dealloc__()
BaseClass __dealloc__()
aber es nicht,ihn zum Absturz zu bringen diejenigen, die ich als die DerClass('Ciao').
warum passiert das so und wie kann ich vermeiden, fordern die cinit von BaseClass.
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Sie sind richtig, dass Sie sollten sehen, die cinit - Methode aufgerufen, Ihre übergeordneten Klasse. So steht es hier in den docs.
http://docs.cython.org/src/userguide/special_methods.html
Hier ist, was ich versucht habe mit:
Es kompiliert, aber es gab mir diese Fehlermeldung, wenn ich versuchte es:
Also änderte ich die BaseClass.cinit, auch die "int n" - parameter, der DerClass.cinit hat:
Und jetzt scheint es zu funktionieren:
Hier ist meine runner.py Datei:
Obigen Antwort kann nicht posieren ganz die beste Lösung. Lesen Sie den Abschnitt "Initialisierung Methoden: __cinit__() und __init__()" von dem link oben, gibt diese Informationen:
und
So wäre meine Lösung, nur ersetzen Sie die Argumente der
__cinit()__
imBaseClass
so, dass eine variable Anzahl von Argumenten übergeben werden kann, um jede abgeleitete Klasse:Sehen hier für eine Erklärung der
*args
variable in python