Python object erstellen

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
newc0mer
User
Beiträge: 15
Registriert: Sonntag 20. Juli 2008, 14:21

Sonntag 20. Juli 2008, 14:23

Hi

ich habe eine klasse XYZ. Dazu gehört die Funktion sync().

wiefolgt lege ich ein object der klasse XYZ an:

Code: Alles auswählen

obj = package.XYZ
dann möchte ich auch sync() zugreifen:

Code: Alles auswählen

Code:

 if obj.sync == false:
.
.
.
da schmeisst mir der python compiler aus:

Code: Alles auswählen

AttributeError: type object 'XYZ' has no attribute 'sync'
Wieso? Ich arbeite mit eclipse und dort wird mir "sync" sogar angezeit, wenn ich "obj." tippe...

danke
lunar

Sonntag 20. Juli 2008, 15:41

newc0mer hat geschrieben:wiefolgt lege ich ein object der klasse XYZ an:

Code: Alles auswählen

obj = package.XYZ
Nein, tust du nicht. Du bindest die Klasse "XYZ" an den Namen "obj".
Das erkennst du im interaktiven Interpreter:

Code: Alles auswählen

>>> class Foobar: pass
...
>>> f = Foobar
>>> f is Foobar
True
>>> isinstance(f, Foobar)
False
dann möchte ich auch sync() zugreifen:

Code: Alles auswählen

 if obj.sync == false:
Zum einen heißt die Bool'sche Konstante in Python "False" (Python beachtet Groß- und Kleinschreibung), zum anderen bedeutet diese Fehlermeldung, dass die Klasse "XYZ", die ja an "obj" gebunden wurde, nun mal kein Attribut "sync" hat.

Abgesehen davon ist diese Abfrage irgendwie auch komisch, wenn du "sync" als Methode aufrufen möchtest.
da schmeisst mir der python compiler aus:

Code: Alles auswählen

AttributeError: type object 'XYZ' has no attribute 'sync'
Die Meldung kommt vom Interpreter und ist völlig richtig.

Fazit: Ich weiß nicht, was du machst, aber es sieht sehr merkwürdig aus, und lässt darauf schließen, dass du von Python noch nicht allzu viel Ahnung hast, und lieber erstmal das Tutorial komplett durcharbeiten solltest.

Genaueres kann man nur sagen, wenn du mehr Code zeigst.
Wieso? Ich arbeite mit eclipse und dort wird mir "sync" sogar angezeit, wenn ich "obj." tippe...
Autocompletion verträgt sich nicht immer gut mit so dynamischen Sprachen wie Python.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Sonntag 20. Juli 2008, 17:44

Hallo newc0mer,
ich denke mal, Du hast einfach
an beiden Stellen die Klammern vergessen:

1:

Code: Alles auswählen

obj = package.XYZ() 
um eine Instanz zu erzeugen und

2:

Code: Alles auswählen

  if obj.sync() == False:
um die Funktion aufzurufen.

Vielleicht hilft das...

:wink:
yipyip
BlackJack

Sonntag 20. Juli 2008, 17:55

@newc0mer: Die ``if``-Abfrage würde man eher so schreiben:

Code: Alles auswählen

if not obj.sync():
bords0
User
Beiträge: 170
Registriert: Mittwoch 4. Juli 2007, 20:40

Sonntag 20. Juli 2008, 21:56

yipyip hat geschrieben:Hallo newc0mer,
ich denke mal, Du hast einfach
an beiden Stellen die Klammern vergessen:

1:

Code: Alles auswählen

obj = package.XYZ() 
um eine Instanz zu erzeugen und

2:

Code: Alles auswählen

  if obj.sync() == False:
um die Funktion aufzurufen.
Du meinst, dass die Klasse

Code: Alles auswählen

 package.XYZ 
kein Attribut sync hat, aber die Instanz

Code: Alles auswählen

 package.XYZ() 
hat eine Methode sync? Urgs. Hoffentlich nicht. Was wäre das für ein grässlicher Einstieg in Python für newc0mer.

Naja, ein dir(package.XYZ) bzw. dir(package.XYZ()) sollte Klarheit schaffen. Oder ein Blick in die Doku :-)
Antworten