Seite 1 von 1

Methode wird nicht gefunden

Verfasst: Freitag 4. April 2008, 09:24
von marko
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?

Re: Methode wird nicht gefunden

Verfasst: Freitag 4. April 2008, 09:30
von Hyperion
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 ;-)

Re: Methode wird nicht gefunden

Verfasst: Freitag 4. April 2008, 09:43
von Zap
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.

Verfasst: Freitag 4. April 2008, 10:00
von marko
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 ;)

Verfasst: Freitag 4. April 2008, 10:18
von 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".

Verfasst: Freitag 4. April 2008, 10:21
von Hyperion
@BlackJack: Richtig, hab ich ein Glück nie müssen ^^ Dafür wurde ich mit Prolog gequält ...

Verfasst: Freitag 4. April 2008, 10:35
von lunar
Hyperion hat geschrieben:@BlackJack: Richtig, hab ich ein Glück nie müssen ^^
Wieso "zum Glück"? ;)

Verfasst: Freitag 4. April 2008, 12:40
von Leonidas
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.