Seite 1 von 1
Funktion zum erstellen eines Objektes
Verfasst: Donnerstag 1. Mai 2008, 18:14
von borsty88
hallo
ich würde gerne folgendes tun weis aber nich genau wies funktioniert.
und zwar hab ich eine Variable 'name' und ich würd gern den Wert der Variable als Name eines Objekts nehmen und dieses Objekt soll Element einer Klasse sein.
Code: Alles auswählen
class Klasse(object):
var = 0
def new():
name = input('name')
name = Klasse()
Problem nur:
er erstellt dann ein Objekt 'name' von 'Klasse'
Verfasst: Donnerstag 1. Mai 2008, 18:22
von Trundle
Statt `input` sollte man lieber `raw_input` verwenden (weil `input` `eval` benutzt, was meistens eine doofe Idee ist, und bei Benutzereingaben sowieso). Außerdem sollte `new` noch als ersten Parameter ein Exemplar der Klasse (explizit) empfangen, per Konvention wird der Parameter `self` genannt.
Und den Rest verstehe ich nicht wirklich, suchst du eventuell `setattr`?
Verfasst: Donnerstag 1. Mai 2008, 18:25
von borsty88
´ne glaub nich das ma des mit 'setattr' erreicht
nehmen wir an name = 'HALLO'
dann will ich das ein Objekt namens HALLO als Instanz von Klasse entsteht
geht sowas?[/code]
Verfasst: Donnerstag 1. Mai 2008, 18:32
von Trundle
Mit `setattr` kann man ein Attribut eines Objektes setzen.
wäre also äquivalent zu
Verfasst: Donnerstag 1. Mai 2008, 18:48
von borsty88
ne ich will ein NEUES OBJEKT
und dieses neue objekt soll zu einer vorher erstellten Klasse gehören
und wenn gilt (name = 'HALLO') dann soll das OBJEKT HALLO heisen
und wenn ich name = 'Pumukel' mach dann soll das OBJEKT Pumukel heisen
Verfasst: Donnerstag 1. Mai 2008, 19:10
von audax
Du suchst das Stichwort Metaprogrammierung...
Code: Alles auswählen
def createClass(name):
class Created(object):
pass
Created.__name__ = name
return Created
name = 'Foobar'
cls = createClass(name)
print name == cls.__name__
instance = cls()
Sowas solltest du aber eigentlich niemals brauchen...
Verfasst: Donnerstag 1. Mai 2008, 19:26
von BlackJack
Ich verstehe die Ausgangsfrage nicht so recht. Objekte selbst haben keine Namen. Man kann Objekte an Namen binden, aber genau dass geht dynamisch mit `setattr()`.
Verfasst: Donnerstag 1. Mai 2008, 20:43
von birkenfeld
BlackJack: er sucht wohl
Code: Alles auswählen
>>> Klasse.new() # staticmethod() vorausgesetzt
HALLO
>>> HALLO
<__main__.Klasse instance at ...>
Du darfst ihm jetzt zeigen, was er statt dessen machen sollte
