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 x RM> <__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 um RM> <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().name RM> 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.name RM> Roman _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python