Re: [python] Dynamicke volani trid

2006-11-07 Tema obsahu mtip
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

2006-11-07 Tema obsahu Jan Matejka
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

2006-11-07 Tema obsahu superman
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

2006-11-07 Tema obsahu superman
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

2006-11-07 Tema obsahu Jan Matejka
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

2006-11-07 Tema obsahu Roman Miklos
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

2006-11-07 Tema obsahu mtip
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

2006-11-07 Tema obsahu Tomas Brabenec
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

2006-11-07 Tema obsahu Tom
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