Methode wird nicht gefunden

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.
Benutzeravatar
marko
User
Beiträge: 8
Registriert: Mittwoch 2. April 2008, 17:36

Methode wird nicht gefunden

Beitragvon marko » Freitag 4. April 2008, 09:24

Ich habe ein Object welches laut

Code: Alles auswählen

dir(myObject)

folgendes liefert (Auszug):
[code=][... 'Get-status', ... '_get_status'... 'get_element_get-status', ... 'new_get-status', ... 'set_element_get-status', ...][/code]

das heisst ja, dass diese methoden aufrufbar sein sollten. wenn ich dann jedoch

Code: Alles auswählen

myObject.new_get-status()

aufrufe, bekomme ich einen fehler
[code=]AttributeError: 'myObject' object has no attribute 'new_get'[/code]

sieht also so aus, als würde der interpreter das '-'zeichen in methodennamen ignorieren. nur warum wird sie dann live in dir() gelistet? ist das irgendwie nicht erlaubt in methodennamen - zu verwenden?


und vor allem: WIE KOMM ICH DANN DRAN?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Re: Methode wird nicht gefunden

Beitragvon Hyperion » Freitag 4. April 2008, 09:30

marko hat geschrieben:sieht also so aus, als würde der interpreter das '-'zeichen in methodennamen ignorieren. nur warum wird sie dann live in dir() gelistet? ist das irgendwie nicht erlaubt in methodennamen - zu verwenden?

Also abgesehen davon, dass man laut PEP8 keine "-" verwenden soll, bin ich noch in keiner Sprache darauf gekommen, das zu versuchen! Das "-" ist ja idR. ein mathematischer Operator ... wie soll Python da wissen, ob das ein Name ist, oder eben zu einer "Rechnung" gehört? Daher vermute ich einfach ganz stark, dass ein "-" in Bezeichnern nicht erlaubt ist.

Wieso dir() das mit ausgibt ist ja klar: Das scannt ja nur die Definitionen! Und da ist es eindeutig, da nach einem "def" ja keine Operation stehen kann!
und vor allem: WIE KOMM ICH DANN DRAN?

Die Frage stellt sich eigentlich nicht! Änder den Namen und schon ist's kein Problem mehr ;-)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Re: Methode wird nicht gefunden

Beitragvon Zap » Freitag 4. April 2008, 09:43

marko hat geschrieben:und vor allem: WIE KOMM ICH DANN DRAN?

Mich wundert ehr: WIE KOMMT DIE METHODE/DAS ATTRIBUT DAHIN?

Code: Alles auswählen

In [2]: def Foo-Bar():
------------------------------------------------------------
   File "<ipython console>", line 1
     def Foo-Bar():
            ^
<type 'exceptions.SyntaxError'>: invalid syntax

Muss ja schon fast über irgend nen direkten Zugriff auf das Dict des Objekts passiert sein.
Benutzeravatar
marko
User
Beiträge: 8
Registriert: Mittwoch 2. April 2008, 17:36

Beitragvon marko » Freitag 4. April 2008, 10:00

wird von einem framework (ZSI) dynamisch generiert. hab die methode im framework gepatched....jetzt läufts.


PS: wenn ich die methode(n) selbst definiert hätte, waäre ich auch nie auf ein '-' gekommen ;)
BlackJack

Beitragvon BlackJack » Freitag 4. April 2008, 10:18

@Hyperion: Du hast also noch nie in Lisp oder Scheme programmiert. Da sind '-' in Namen normal. Da ist das '-' als Rechenoperator auch nur ein Name für die "Abziehen-Funktion".
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Freitag 4. April 2008, 10:21

@BlackJack: Richtig, hab ich ein Glück nie müssen ^^ Dafür wurde ich mit Prolog gequält ...
lunar

Beitragvon lunar » Freitag 4. April 2008, 10:35

Hyperion hat geschrieben:@BlackJack: Richtig, hab ich ein Glück nie müssen ^^

Wieso "zum Glück"? ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 4. April 2008, 12:40

BlackJack hat geschrieben:Da sind '-' in Namen normal. Da ist das '-' als Rechenoperator auch nur ein Name für die "Abziehen-Funktion".

call-with-current-continuation :)

In Python 3.0 sollte es aber Möglich sein, - ähnliche Zeichen zu verwenden :) Etwa das NON BREAKING HYPHEN, FIGURE DASH, EN DASH, EM DASH und HORIZONTAL BAR. HYPHEN BULLET vielleicht auch. Kann aber auch sein, dass so Späße wie in Punycode eben nicht erlaubt werden.

P.S.: Auf seltsame Attribute kann man mittels ``getattr()`` zugreifen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder