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.

Code: Alles auswählen

setattr(spam, 'eggs', value)
wäre also äquivalent zu

Code: Alles auswählen

spam.eggs = value

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 ;)