Diky vsem za pomoc. Tom
On Nov 7, 8:39 pm, mtip <[EMAIL PROTECTED]> wrote: > Myslel jsem to takhle -- tady je podle me rozdil mezi x=a a instanci x=a() > > # 1. > class a: > def __init__(self): > print 1 > > x=a #neprintne nic > x=a() #print 1 > > # 2. > x=a #pri x=a() to samozrejme selze > class aa(x): > def __init__(self): > x.__init__(self) > > def add(self): > self.mx=5 > > d=aa() > > #asi jsem si to vylozil tak, ze o tohle autorovi puvodne slo > Mirek > > -------------------------------------------------------------------------------------------------------------------- > RM> Neviem ci autor mal presne na mysli metody triedy, alebo myslel na metody > RM> instancie, ale rad by som k tomu dodal toto: > > RM> Pretoze>>>> x=a > >>>> print x > RM> __main__.a > >>>> print x()RM> <__main__.a instance at 0x00B7FBE8>>>>> x=a() > >>>> print xRM> <__main__.a instance at 0x00B7FBE8> > > RM> tak nevidim na prvy pohlad rozdiel medzi tym, ci sa pouzije>>>> x=a > >>>> x().fa()RM> alebo sa vytvori hned instancia x a pouzije sa jej metoda > >>>> fa()>>>> x=a() > >>>> x.fa()RM> Az na to, ze v tom prvom pripade sa jedna o vynutene > >>>> instancovanie, pri > RM> ktorom nevznikne trvanliva instancia (t.j. objekt), ale nejaky nullobjekt. > > RM> Ked chcem napriklad zmenit jeho atribut nefunguje to - pozri priklad > RM> dole. > > RM> Ale v oboch horeuvedenych pripadoch sa jedna o volanie metody instancie a > RM> nie triedy. > RM> Nie je mi zname, ze by v Pythone boli mozne metody triedy (podobne ako > RM> static v Jave) > RM> Da sa vytvorit neviazana (unbound) metoda>>>> um=a.fa > >>>> print umRM> <unbound method a.fa> > > RM> ale pokus o jej zavolanie zlyha>>>> um()RM> Traceback (most recent call > last): > RM> File "<pyshell#17>", line 1, in -toplevel- > RM> um() > RM> TypeError: unbound method fa() must be called with a instance as first > RM> argument (got nothing instead) > > RM> Musim vzdy najprv vytvorit instanciu triedy a a potom zavolat um, kde jej > RM> ako prvy parameter odovzdam instanciu>>>> ia=a() > >>>> um(ia)RM> 1 > > RM> Priklad: Problem s vynutenym instancovanim > > RM> # definujem triedu>>>> class person:RM> def __init__(self): > RM> self.name = 'old' > RM> def setname(self, new): > RM> self.name = new > > RM> # menim atribut self.name cez vynutene instancovanie>>>> print > person().name > RM> old > >>>> person().setname('Roman') > >>>> print person().nameRM> old > > RM> takze nefunguje to- atribut self.name nezmenil hodnotu > > RM> # menim atribut self.name normalne t.j. vytvorenim instancie triedy>>>> > myperson=person() > >>>> print myperson.name > RM> old > >>>> myperson.setname('Roman') > >>>> print myperson.nameRM> Roman _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python