Re: [python] Dynamicke volani trid

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


[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


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


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 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
unbound method a.fa

ale pokus o jej zavolanie zlyha
 um()
Traceback (most recent call last):
  File pyshell#17, 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 python@py.cz


To
Konference PyCZ python@py.cz
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 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 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 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