Vytvorenie objektu z triedy nazvu v hodnote premennej ;) – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vytvorenie objektu z triedy nazvu v hodnote premennej ;) – Python – Fórum – Programujte.comVytvorenie objektu z triedy nazvu v hodnote premennej ;) – Python – Fórum – Programujte.com

 

Tom@sQo0
Stálý člen
21. 12. 2007   #1
-
0
-

ahoj,
ked nazvu threadu velmi nerozumiete, tak sorry, ale lepsie to popisat neviem :(
skusim radsej prakticky priklad:



class Foo:
def hello(self):
return "hello foo!"

premenna = "Foo"

instancia = *nieco* #toto potrebujem od vas pomoct

#pricom chcem, aby premenna instancia bola instanciou triedy Foo... cize, aby sa dalo robit napr:
print instancia.hello()

# taktiez by som nejak do chcel inicializovat, resp. pouzivat konstruktor napr.
class Foo2:
def __init__(self,bla, blabla="foooo"):
self.bla=bla
print self.bla


# a teraz to chcem inicializovat a pracovat s tym, pricom mam: premenna = "Foo2"....




ako to mam spravit? diky ;)

Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
geon0
Grafoman
21. 12. 2007   #2
-
0
-

já znám jeden fígl, kdy to uděláš jako slovník:

class Foo:

def hello(self):
return "hello foo!"

premenna = "Foo"
instance={}

instance[premenna] = Foo()
print instance[premenna].hello()

Nahlásit jako SPAM
IP: 83.69.40.–
geon. volume doprava.
Tom@sQo0
Stálý člen
21. 12. 2007   #3
-
0
-

noo nie celkom toto som chcel ;(
ide o to, ze mam mnozstvo classov, ako Tell, Say, Shout, Gossip (prikazi NUTS kodu- vsetky odvodene od jednej, len maju ine texty prikazov), cize aj ***pocas vykonavania*** kodu sa dozviem, ze co za triedy vlastne chcem inicializovat
a teraz po vyberani z databazi chcem nieco take, ze:
(nejak sa dopracujem k tomu, ze prikaz="Shout")
a teraz chcem
cmd = prikaz() # tu je to problematicke, lebo neviem inicializovat triedu (teraz napr) Shout ...
cmd.run()



mna napadlo este cez eval (viem, ze otrasne funkcia, ale po overeni vstupu by to mohlo celkom fungovat..)

kazdopadne aspon v tejto jednej veci sa mi viac paci PHPcko, nakolko u neho staci len:



<?php
$instancia = new $premenna();
?>


any ideas? podla teba je eval dobe riesenie? alebo sa mam este skusit spytat v konferencii?

Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
bukaj0
Věrný člen
21. 12. 2007   #4
-
0
-
Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Tom@sQo0
Stálý člen
21. 12. 2007   #5
-
0
-

ahoj,
no pri triede napr.



class Foo:
def __ini__(self):
print "spustena trieda foo"
def hello(self):
print "hello python"

to nefunguje, pretoze tu potrebujem aj spustit konstruktor a ten nie a nie sputit takto ... taktiez chcem potom pracovat s tym normalne dalej...
v zufalej situacii som skusil
eval("cmd = Foo()") ale ani to mi nefunguje(pricom cmd = Foo() funguje ...)


nejake napady? ;-)

Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
Zelenáč0
Posthunter
21. 12. 2007   #6
-
0
-

No, python neumim... Ale neslo by v nem udelat neco takoveho?



<?
if($prikaz == "Shout"){
$instance = new Shout();
} else if($prikaz == "Neco_jineho"){
$instance = new Neco_jineho();
}
$instance->run();
?>

Event. proc je tak dulezite spoustet konstruktor jako konstruktor? Nemuzes zkratka z konstruktoru udelat "normalni" metodu?

Nahlásit jako SPAM
IP: 89.176.254.–
geon0
Grafoman
21. 12. 2007   #7
-
0
-

To Tom@sQo : ale funguje, jen musíš správně psát: __ini__ --> __init__

class Foo:


def __init__(self):
print "spustena trieda foo"

def hello(self):
print "hello python"

# with reflection
getattr(globals()['Foo'](), 'hello')()

Nahlásit jako SPAM
IP: 83.69.40.–
geon. volume doprava.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý