Instance Name

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mike

Freitag 16. September 2005, 09:06

Hallo..

habe eine klasse test, und möchte nun in der Klasse auf den Namen der Instance zugreifen die die Klasse gerade benötigt, wie mache ich das??

class test:

def show_instance_name():
print ?????

instanz=test()
instanz.show_instance_name()
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Freitag 16. September 2005, 11:01

Ich nehme mal an mit "Name der Instanz" meinst du in deinem Beispiel "instanz", weil die Variable so heißt.

Das ist aber nicht eindeutig! Ein Objekt kann ja durchaus unter mehreren Namen bekannt sein:

Code: Alles auswählen

Python 2.3.5 (#2, Aug 30 2005, 15:50:26) 
[GCC 4.0.2 20050821 (prerelease) (Debian 4.0.1-6)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class test:
...   pass
... 
>>> t1 = test()
>>> t2 = t1
>>> print t1
<__main__.test instance at 0xb7deebcc>
>>> print t2
<__main__.test instance at 0xb7deebcc>
>>> 
t1 und t2 verweisen hier beide aus das selbe Objekt und t1 ist nicht mehre oder weniger wichtig als t2, also welches soll der Name der Instanz sein?

Deswegen denke ich, es wird nicht möglich sein, sowas wie einen Namen der Instanz zurückzugeben, wenn du eine eindeutige Bezeichnung des Objekts suchst, ist das natürlich was anderes, der string der da oben zurückgegeben wird wäre da z.B. ein Ansatz!

HTH
Henning
Mike

Freitag 16. September 2005, 14:17

mhh..
danke erstmal für die rasche Antwort..

vielleicht formulier ich die frage nochmal, was nicht heißen soll das sie damit verständlicher wird.. :oops:

Gibt es eine Möglichkeit in einer Klasse den Name der Instanz/Variable welche auf die Klasse verweißt auszulesen. Im Fall von Henning wäre dies z.Bsp "t1"..
Sprich ich habe von einer Klasse mehrere Instanzen und möchte nun wissen welche Instanz gerade auf eine Methode der Klasse zugreift..
XT@ngel
User
Beiträge: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Freitag 16. September 2005, 14:33

Gehört nicht zu den Codesnippets :wink:
MfG
Andreas
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Freitag 16. September 2005, 14:38

Ich glaube, ich hab schon verstanden, was du willst, aber du hast meine Antwort glaub ich nicht verstanden

Du sagst, die Instanz würde in meinem Beispiel t1 heissen.
Das ist schlichtweg falsch! Wie gesagt, genausosehr heißt sie t2!

t2 ist keine Kopie von t1 es ist dasselbe Objekt!
Vielleicht wird das deutlicher wenn ich an dem Objekt mal etwas ändere:

Code: Alles auswählen

>>> class Test:
...   pass
... 
>>> t1 = Test()
>>> t2 = t1
>>> print t1.a
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: Test instance has no attribute 'a'
>>> print t2.a
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: Test instance has no attribute 'a'
>>> 
>>> t1.a = 42
>>> print t1.a
42
>>> print t2.a
42
>>> 
Vielleicht beschreibst du mal das nächst größere Problem, also warum du überhaupt den Namen einer Variable haben willst, ich denke, da müsste man ansetzen die Sache anders zu lösen...
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Freitag 16. September 2005, 14:40

XT@ngel hat geschrieben:Gehört nicht zu den Codesnippets :wink:
MfG
Andreas
Hä?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Freitag 16. September 2005, 15:03

henning hat geschrieben: Hä?
Erklärung: Wurde ursprünglich in den Codesnippets gepostet, Andreas hat's dann hierher verschoben.
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Freitag 16. September 2005, 15:11

Achso :-)
Gast

Montag 19. September 2005, 10:00

das t2 eine kopie von t1 ist, ist mir schon klar mir geht es aber darum wenn t1 und t2 Instanzen von Test sind..

class Test:
pass
t1=Test()
:arrow: t2=Test()
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Montag 19. September 2005, 10:52

Nein du hast es NICHT verstanden.
t2 ist KEINE Kopie von t1 es verweist auf das SELBE Objekt!

Schreib doch einfach mal ein bisschen mehr, also vor allem, wozu du die Namen der Objekte brauchst und weas du im größeren vor hast.
Die Objekte haben keine zurückverfolgbaren Namen.

Wenn ich

Code: Alles auswählen

print Test()
mache, hat das erzeugt Objekt z.B. keinen Namen, in meinem letzten Beispiel hatte das Objekt 2 Namen (t1 und t2). Theoretisch könnte es auch 300 Namen haben.

Also sag doch einfach, was du genau vorhast dann kann dir sicher geholfen werden.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Montag 19. September 2005, 14:13

Sei doch nicht so schreibfaul, erstelle einfach einen Constructor, der einen übergebenen Namen speichert

Code: Alles auswählen

class Test:
  def __init__(self,name=None):
    self.name = name
  .......

t1 = Test("t1")
t2 = Test("t2")
Antworten