Klassenaufteilung vs.Module Scope
Verfasst: Mittwoch 31. März 2010, 12:07
Hallo,
vorneweg, ich bin noch neu in Python...
Ich habe eine allgemeine Frage bzgl. Aufteilung von Klassen in separate Dateien, die ja in Python einen Module Scope darstellen:
Base Class in File Base.py
Abgeleitete Klasse in File Derived.py:
Wenn ich die Base Class mit from einbinde, kann ich zwar die globale Funktion super() aufrufen, die die Basis-Instanz des Objekts ermittelt, da Base mit from import in den Module Scope kopiert wird.
Aber dann kann ich nicht mehr die Basis-Methoden aufrufen in der abgeleiteten Klasse mittels
da ja der Scope Base "nicht mehr existiert".
Wenn ich aber die Base Class mit
importiere, habe ich das Problem, dass ich bei super() den Module Scope von Base dabei habe, außerdem muss ich dann den Module Scope Base bei der Ableitung mit angeben:
Deshalb meine Frage: Wie ist die sinnvolle Aufteilung von Klassen in Files bei Python, pro Klasse eine Datei fkt. wg. o.g. Probleme ja nicht, da ich mit einer Datei immer einen neuen Module Scope definiere?
Dane für alle Hinweise,
AlGaN
vorneweg, ich bin noch neu in Python...
Ich habe eine allgemeine Frage bzgl. Aufteilung von Klassen in separate Dateien, die ja in Python einen Module Scope darstellen:
Base Class in File Base.py
Code: Alles auswählen
class Base(object):
def __init__(self, b = 42):
self.__b = b
def getB(self):
return self.__b
def setB(b):
self.__b = b
def __str__(self):
return 'Base: b = %d' % self.__b
Code: Alles auswählen
from Base import Base
class Derived(Base):
def __init__(self, d = 0.0):
super(Derived, self).__init__()
self.__d = d
def getD(self):
return self.__d
def setD(self, d):
self.__d = d
def __str__(self):
return 'Derived: %f' % self.__d
Aber dann kann ich nicht mehr die Basis-Methoden aufrufen in der abgeleiteten Klasse mittels
Code: Alles auswählen
def __str__(self):
return 'Base: %s, Derived: %f' % (Base.__str__, self.__d)
Wenn ich aber die Base Class mit
Code: Alles auswählen
import Base
Code: Alles auswählen
class Derived(Base.Base):
def __init__(self, d = 0.0):
# super(Derived, self).__init__() # fkt. so nicht!
Dane für alle Hinweise,
AlGaN