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

Ich habe ein Object welches laut

Code: Alles auswählen

dir(myObject)
folgendes liefert (Auszug):

Code: Alles auswählen

[... 'Get-status', ... '_get_status'... 'get_element_get-status', ... 'new_get-status', ... 'set_element_get-status', ...]
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: Alles auswählen

AttributeError: 'myObject' object has no attribute 'new_get'
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: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

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

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

@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: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

Hyperion hat geschrieben:@BlackJack: Richtig, hab ich ein Glück nie müssen ^^
Wieso "zum Glück"? ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Antworten