Portál AbcLinuxu, 9. května 2025 22:53
class class1(): def __init__(self): self.val0=0.0 self.val1=1.0 def setVal1(self,val1): self.val1=val1 def getVal0(self): return self.val0 def getVal1(self): return self.val1 class class2(class1): def __init__(self,inst_class1): if isinstance(inst_class1,class1): for i in dir(inst_class1): atr=getattr(inst_class1,i) setattr(self,i,atr) self.val2=2.0 def getVal2(self): return self.val2Po vytvoreni konkretnich instanci to sice funguje OK, ale chci pouzit nejake ciste reseni.
In [2]: a=class1() In [3]: a.setVal1(11111.111) In [4]: b=class2(a) In [5]: b.get b.getVal0 b.getVal1 b.getVal2 In [5]: b.getVal1() Out[5]: 11111.111
class class2(class1): def __init__(self): super(class1, self).__init__() self.val2=2.0BTW když už bys mermomocí chtěl zkopírovat jednu instanci do druhé, tak místo iterování přes dir stačí sáhnout přímo do jmenného prostoru:
self.__dict__.update(otherinstance.__dict__)
def setGlobalEnv(self,vlmProb): attrList=['rho','getRho','pressure','getPressure'] for i in attrList: setattr(self,i, (getattr(vlmProb,i)))
class EnvMixin(object): rho, pressure = None, None @classmethod set(cls, rho, pressure): cls.rho = rho cls.pressure = pressure class vlmProblem(whatever, EnvMixin): ... class vlmPanel(whateverelse, EnvMixin): ...
class envClass(object): @classmethod def __init__(cls): cls.rho=1.225 cls.pressure=10235.0 @classmethod def setRho(cls, rho): cls.rho = rho @classmethod def setPressure(cls,pressure): cls.pressure = pressure @classmethod def getRho(cls): return cls.rho @classmethod def getPressure(cls): return cls.pressure class vlmProblem(envClass): def __init__(self): .........
class envClass(object): def __new__(cls, *args, **kargs): cls.rho = kargs.pop("rho", 1.225) cls.pressure = kargs.pop("pressure", 10235.0) return object.__new__(cls, *args, **kargs)Ale to je spíš takový akademický blbnutí, pro tvůj účel by měl bohatě stačit KISS tvar:
class envClass(object): rho=1.225 pressure=10235.0Jednoduché, čitelné, předem inicializované, můžeš to mixovat k jiným objektům (python nemá problém s vícenásobnou dědičností)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.