[python] dynamicky vytvarene podtridy?

Jaroslav Pachola j_p_misc na centrum.cz
Čtvrtek Září 30 16:49:38 CEST 2004


Hezke reseni, sice ta dedicnost ma trosku komplikovany graf (degenerovany 
binarni strom), ale to nemusi byt vubec na skodu. Vzhledem k tomu, ze jste 
pouzil "old style classes", slo by to provest i pomoci modifikace __bases__, 
coz u trid noveho stylu nejde. 

JP

Dne Thursday 30 of September 2004 16:27 Jan Matejka napsal:
> > Ano slo -- jde v podstate o vlastni konstruktor, jestli jsem to dobre
> > pochopil.
>
> Spis jsem myslel opakovane vytvareni tridy slozene ze dvou trid. Trochu
> jsem ten priklad upravil na rekurzivni volani combineClasses.
> Nebo Vy mluvite o voze a ja o koze?
>
> class a:
> 	def __init__(self):
> 		print "init a"
>
> 	def aa(self):
> 		print "aa"
>
> class b:
> 	def __init__(self):
> 		print "init b"
>
> 	def bb(self):
> 		print "bb"
>
> class c:
> 	def __init__(self):
> 		print "init c"
>
> 	def cc(self):
> 		print "cc"
>
> class d:
> 	def __init__(self):
> 		print "init d"
>
> 	def dd(self):
> 		print "dd"
>
>
> def combineClasses(clslist):
> 	if len(clslist)==1:
> 		return clslist[0]
> 	else:
> 		c1=clslist[0]
> 		c2=combineClasses(clslist[1:])
> 		class z(c1,c2):
> 			def __init__(self):
> 				c1.__init__(self)
> 				c2.__init__(self)
> 		return z
>
> print "kombinace a,b"
> cz=combineClasses([a,b])
> iz=cz()
>
> iz.aa()
> iz.bb()
> print "a",issubclass(cz,a)
> print "b",issubclass(cz,b)
> print "c",issubclass(cz,c)
> print "d",issubclass(cz,d)
>
>
> print "kombinace a,c,d"
> cz=combineClasses([a,c,d])
> iz=cz()
> iz.aa()
> iz.dd()
> iz.cc()
> print "a",issubclass(cz,a)
> print "b",issubclass(cz,b)
> print "c",issubclass(cz,c)
> print "d",issubclass(cz,d)
>
> Jan Matejka
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://hugo.zagamma.cz/mailman/listinfo/python

-- 
>pyobfuscate is a source code obfuscator: It makes Python source code
>hard to read for humans, while still being executable for the Python
>interpreter. 

Of course, this facility comes as standard with Perl.
(From Python mailing list)



Další informace o konferenci Python