Re: [python] Dynamicke volani trid
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> RM> ale pokus o jej zavolanie zlyha um() RM> Traceback (most recent call last): RM> File "", 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
Re: [python] Statické metody v Pythonu
s použitím dekorátoru class S(object): @staticmethod def staticM(pp): print pp*2 S.staticM("nazdar ") více: http://www.ddj.com/184406073 Jan Matějka > -Original Message- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of superman > Sent: Tuesday, November 07, 2006 7:59 PM > To: Konference PyCZ > Subject: [python] Statické metody v Pythonu > > Nevíte, jak udělat statickou metody v Pythonu, myslím metodu, > které není vázána k instanci, tedy self, ale jen ke třídě. > > Zkoušel jsem: > > class trida: > > def static(i): > print i > > > trida.static(3) > > A dostal jsem chybové hlášení, že se Pythonu nelíbí, že > předávám číslo a ne instanci. Určitě to nějak jde, ale po > pokusu někde se to dočíst to vzdávám. Nevíte jak na to? > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Statické metody v Pythonu
Nevíte, jak udělat statickou metody v Pythonu, myslím metodu, které není vázána k instanci, tedy self, ale jen ke třídě. Zkoušel jsem: class trida: def static(i): print i trida.static(3) A dostal jsem chybové hlášení, že se Pythonu nelíbí, že předávám číslo a ne instanci. Určitě to nějak jde, ale po pokusu někde se to dočíst to vzdávám. Nevíte jak na to? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Statické metody v Pythonu
Nevíte, jak udělat statickou metody v Pythonu, myslím metodu, které není vázána k instanci, tedy self, ale jen ke třídě. Zkoušel jsem: class trida: def static(i): print i trida.static(3) A dostal jsem chybové hlášení, že se Pythonu nelíbí, že předávám číslo a ne instanci. Určitě to nějak jde, ale po pokusu někde se to dočíst to vzdávám. Nevíte jak na to? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Dynamicke volani trid
Pokud se jedná o to vytvořit třídu na základě textu, tak se dá využít funkce local: class a: def fa(self): print 1 #nalezeni tridy trida=locals()["a"] #vytvoreni instance nalezene tridy ai=trida() ai.fa() Jan Matějka > -Original Message- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of Tom > Sent: Tuesday, November 07, 2006 3:39 PM > To: python@py.cz > Subject: [python] Dynamicke volani trid > > Zdravim, nevite nahodou nekdo jestli Python umi zavolat > metodu tridy s tim, ze jmeno te tridy je kdesi v promenne? neco jako: > > class Trida1(): > def self.akce: > nejaka akce... > ... > class Trida2(): > def self.akce: > jina akce... > > > a = "Trida1" > > a.akce /* by se pak interpretovalo jako Trida1.akce.*/ > > a = "Trida2" > > a.akce /* by se pak interpretovalo jako Trida1.akce. */ > > Diky moc. > > Tom > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Dynamicke volani trid
Neviem ci autor mal presne na mysli metody triedy, alebo myslel na metody instancie, ale rad by som k tomu dodal toto: Pretoze >>> x=a >>> print x __main__.a >>> print x() <__main__.a instance at 0x00B7FBE8> >>> x=a() >>> print x <__main__.a instance at 0x00B7FBE8> >>> tak nevidim na prvy pohlad rozdiel medzi tym, ci sa pouzije >>> x=a >>> x().fa() alebo sa vytvori hned instancia x a pouzije sa jej metoda fa() >>> x=a() >>> x.fa() Az na to, ze v tom prvom pripade sa jedna o vynutene instancovanie, pri ktorom nevznikne trvanliva instancia (t.j. objekt), ale nejaky nullobjekt. Ked chcem napriklad zmenit jeho atribut nefunguje to - pozri priklad dole. Ale v oboch horeuvedenych pripadoch sa jedna o volanie metody instancie a nie triedy. Nie je mi zname, ze by v Pythone boli mozne metody triedy (podobne ako static v Jave) Da sa vytvorit neviazana (unbound) metoda >>> um=a.fa >>> print um ale pokus o jej zavolanie zlyha >>> um() Traceback (most recent call last): File "", line 1, in -toplevel- um() TypeError: unbound method fa() must be called with a instance as first argument (got nothing instead) Musim vzdy najprv vytvorit instanciu triedy a a potom zavolat um, kde jej ako prvy parameter odovzdam instanciu >>> ia=a() >>> um(ia) 1 Priklad: Problem s vynutenym instancovanim # definujem triedu >>> class person: def __init__(self): self.name = 'old' def setname(self, new): self.name = new # menim atribut self.name cez vynutene instancovanie >>> print person().name old >>> person().setname('Roman') >>> print person().name old takze nefunguje to- atribut self.name nezmenil hodnotu # menim atribut self.name normalne t.j. vytvorenim instancie triedy >>> myperson=person() >>> print myperson.name old >>> myperson.setname('Roman') >>> print myperson.name Roman Takze pozor na vynutene intancovanie - nemusi to fungovat tak jak by sme si predstavovali :-) Kto by za kazdu cenu chcel pouzit vynutene instancovanie, ten musi zmenit class person takto >>> class person: name = 'old' def setname(self, new): person.name = new >>> print person().name old >>> person().setname('Roman') >>> print person().name Roman mtip <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 07.11.2006 16:20 Please respond to Konference PyCZ To Konference PyCZ cc Subject Re: [python] Dynamicke volani trid T> Zdravim, nevite nahodou nekdo jestli Python umi zavolat metodu tridy s T> tim, ze jmeno te tridy je kdesi v promenne? neco jako: T> class Trida1(): T> def self.akce: T> nejaka akce... T> ... T> class Trida2(): T> def self.akce: T> jina akce... T> T> a = "Trida1" T> a.akce /* by se pak interpretovalo jako Trida1.akce.*/ T> a = "Trida2" T> a.akce /* by se pak interpretovalo jako Trida1.akce. */ T> Diky moc. T> Tom Odkazem na tridu, by to mohlo byt nejak takhle. class a: def fa(self): print 1 class b: def fa(self): print 2 x=a x().fa() #print 1 x=b x().fa() #print 2 Mirek. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Mgr. Ing. Roman MIKLÓŠ Prvá stavebná sporiteľňa a.s. , P. O. Box 48 Tel.: Fax: ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Dynamicke volani trid
T> Zdravim, nevite nahodou nekdo jestli Python umi zavolat metodu tridy s T> tim, ze jmeno te tridy je kdesi v promenne? neco jako: T> class Trida1(): T> def self.akce: T> nejaka akce... T> ... T> class Trida2(): T> def self.akce: T> jina akce... T> T> a = "Trida1" T> a.akce /* by se pak interpretovalo jako Trida1.akce.*/ T> a = "Trida2" T> a.akce /* by se pak interpretovalo jako Trida1.akce. */ T> Diky moc. T> Tom Odkazem na tridu, by to mohlo byt nejak takhle. class a: def fa(self): print 1 class b: def fa(self): print 2 x=a x().fa() #print 1 x=b x().fa() #print 2 Mirek. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Dynamicke volani trid
Mrkni do manualu na exec() Mohlo by ti to pomoci. TB On 7.11.2006 15:38, Tom wrote: > Zdravim, nevite nahodou nekdo jestli Python umi zavolat metodu tridy s > tim, ze jmeno te tridy je kdesi v promenne? neco jako: > > class Trida1(): > def self.akce: > nejaka akce... > ... > class Trida2(): > def self.akce: > jina akce... > > > a = "Trida1" > > a.akce /* by se pak interpretovalo jako Trida1.akce.*/ > > a = "Trida2" > > a.akce /* by se pak interpretovalo jako Trida1.akce. */ > > Diky moc. > > Tom > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Dynamicke volani trid
Zdravim, nevite nahodou nekdo jestli Python umi zavolat metodu tridy s tim, ze jmeno te tridy je kdesi v promenne? neco jako: class Trida1(): def self.akce: nejaka akce... ... class Trida2(): def self.akce: jina akce... a = "Trida1" a.akce /* by se pak interpretovalo jako Trida1.akce.*/ a = "Trida2" a.akce /* by se pak interpretovalo jako Trida1.akce. */ Diky moc. Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python