Zdravím,
mám triedu Building, z ktorej následne dedia jednotlivé typy budov. V Building potrebujem implementovat mechanizmus, ktorý podľa definície v danej triede prevedie kontrolu, či sú splnené nároky na stavbu budovy. Čiže chcem previesť niečo takéto:
Nemôžem v REQUIREMENTS uviesť priamo triedy a v can_be_build použiť isinstance, pretože triedy sú definované až ďalej v kóde, môžem, teda použiť len stringy na ich identifikáciu. Prístup k inštanciám jednotlivých typov budov je zabezpečený, len neviem, ako môžem otestovať na základe stringu, či to je daná inštancia. Vie niekto poradiť?Kód:class Building(object): # (class, level) REQUIREMENTS = ( ('BaseBuilding', 1), ('OilPlatformBuilding', 3), ... ) def can_be_built(self): for requirement in self.REQUIREMENTS: ... class BaseBuilding(Building): REQUIREMENTS = (...) class OilPlatformBuilding(Building): REQUIREMENTS = (...)
Update: Rýchlejšie píšem, než rozmýšľam :) V self.buildings mám zoznam budov, kde každá budova je inštancia daného typu budovy, takže potrebujem niečo na tento spôsob:
Toto samozrejme nefunguje, pretože requirement[0] je string a nie class.Kód:def can_be_built(self): for requirement in self.REQUIREMENTS: for building in self.buildings: if isinstance(building, requirement[0]): if building.level > requirement[1]: return True return False



