Vorherigen Post Reorganisieren Sie new und init damit
class SheetData():
def __init__(self, shtnam, toprow, keyclm, lftclm, rgtclm):
self.data = get_sheet_data(shtnam, toprow, keyclm, lftclm, rgtclm)
self.clmcnt = rgtclm - lftclm + 1
def getRecordCount(self):
return len(self.data) / self.clmcnt
def get(self, rowidx, clmidx):
return self.data[rowidx * self.clmcnt + clmidx]
class CategoryStructure(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "__instance__"):
cls.__instance__ = super(CategoryStructure, cls).__new__(cls, *args, **kwargs)
cls._data = SheetData(u"Kategoriestruktur", 3, 2, 2, 5)
return cls.__instance__
def getRecordCount(self):
return self._data.getRecordCount()
def get(self, rowidx, clmidx):
return self._data.get(rowidx, clmidx)
Ich habe so geschrieben, aber ich mag die Funktionen getRecordCount () und get () nicht, die in SheetData implementiert sind, die in CategoryStructure implementiert sind. Deshalb habe ich versucht herauszufinden, ob sie durch Vererbung (Mehrfachvererbung) verwaltet werden können.
Ich habe auf die folgende Seite verwiesen.
Die Vererbungsquelle init () muss explizit aufgerufen werden. Bei Mehrfachvererbung auf der oben beschriebenen Site muss beim Angeben eines Arguments (eines anderen Arguments als self) in init () die Vererbungsquellklasse explizit angegeben werden. Implementieren Sie sie daher als solche. (Um auf der sicheren Seite zu sein, wenn ich es ohne Angabe des Klassennamens implementiert habe, hat es nicht wie erwartet funktioniert (SheetData init wurde nicht aufgerufen))
Die einzige Änderung ist die CategoryStructure-Klasse.
class CategoryStructure(object, SheetData):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "__instance__"):
cls.__instance__ = super(CategoryStructure, cls).__new__(cls, *args, **kwargs)
return cls.__instance__
def __init__(self, *args, **kwargs):
#Obwohl self ein Instanzobjekt ist, wird es als einzelne Tonne implementiert, daher lautet das folgende Urteil
#Funktioniert gut
if not hasattr(self, "data"):
#super(CategoryStructure, self).__init__(self, u"Kategoriestruktur", 3, 2, 2, 5)
#obenstehendes(Kommentar)Dann SheetData.__init__()Funktioniert nicht
#Geben Sie den Klassennamen explizit an__init__()Anruf
SheetData.__init__(self, u"Kategoriestruktur", 3, 2, 2, 5)
Ich tappe immer noch, aber vorerst war es erfrischend.
Recommended Posts