Code: Alles auswählen
class fibonacci:
@staticmethod
def berechne():
pass
Code: Alles auswählen
class fibonacci:
@staticmethod
def berechne():
pass
Jein, nur in soweit, wie ich das schon beschrieben hatte, es also nicht nach Typen unterschieden wird, sondern nach Verhalten.ratna_fong hat geschrieben:hat mein Problem eigentlich mit Duck-Typing zu tun?
Der Satz macht keinen Sinn. Das Modul wird doch nicht von `open()` aufgerufen!? `codecs` besitzt halt ein Attribut mit dem Namen `open` und das Objekt ist aufrufbar und besitzt die Semantik die in der Dokumentation beschrieben ist. Und Modul-Objekte besitzen eigentlich kein Verhalten was über Attributzugriffe mittels Punktoperator hinausgeht, also die Grundlagen für *jedes* Objekt.Nun, da codecs das Verhalten besitzt, um von open() aufgerufen werden zu können, funktioniert das alles.
Code: Alles auswählen
import codecs
import ratna
#in der Datei ratna.py gibt es die Funktion open()
codecs.open("sample.txt")
ratna.open("sample.txt")
Hierzu mal zur Sicherheit eine Verständnisfrage:BlackJack hat geschrieben: weil eben alles was man an einen Namen binden kann ein Objekt ist.
Code: Alles auswählen
i = 5
# 5 ist das Objekt
# i ist der Name
# das Objekt 5 wir an den Namen i gebunden
codecs ist der Name an den das Modul-Objekt gebunden wird.ratna_fong hat geschrieben:Hierbei ist codecs das Objekt. Was ist hier der Name, an den das Objekt codecs gebunden wird?
Code: Alles auswählen
import codecs
a = codecs
b = codecs
c = codecs
die Funktion open() ist also das Modul-Objekt, das an den Namen codecs gebunden wird?Leonidas hat geschrieben: codecs ist der Name an den das Modul-Objekt gebunden wird.
Der Name ist codecs, das Objekt, das an den Namen gebunden ist, ist das codecs-Modul. Das codecs-Modul muss nicht immer an den Namen codecs gebunden sein:ratna_fong hat geschrieben:codecs.open("sample.txt")
Hierbei ist codecs das Objekt. Was ist hier der Name, an den das Objekt codecs gebunden wird?
Code: Alles auswählen
>>> import codecs as foo
>>> foo.open
<function open at 0x7fe3fbf83a28>
>>> bar = foo
>>> bar
<module 'codecs' from '/usr/lib/python2.6/codecs.pyc'>
>>> bar.open
<function open at 0x7fe3fbf83a28>
Nein. Das codecs-Modul ist das Modul-Objekt, das an den Namen codecs gebunden wird.ratna_fong hat geschrieben:die Funktion open() ist also das Modul-Objekt, das an den Namen codecs gebunden wird?
Nein, ``open`` ist ein weiteres Objekt (ein Funktionsobjekt), welches über das Modulobjekt erreichbar ist. Und ``open()`` ruft dieses Objekt auf.ratna_fong hat geschrieben:die Funktion open() ist also das Modul-Objekt, das an den Namen codecs gebunden wird?Leonidas hat geschrieben: codecs ist der Name an den das Modul-Objekt gebunden wird.
Ja, hast du so richtig verstanden.ratna_fong hat geschrieben:Hierzu mal zur Sicherheit eine Verständnisfrage:
Code: Alles auswählen
i = 5 # 5 ist das Objekt # i ist der Name # das Objekt 5 wir an den Namen i gebunden
Code: Alles auswählen
import codecs as ratna
ratna.open("sample.txt")
Und die Funktion `open` ist ein Attribut diese Objekts.Rebecca hat geschrieben:Nein. Das codecs-Modul ist das Modul-Objekt, das an den Namen codecs gebunden wird.ratna_fong hat geschrieben:die Funktion open() ist also das Modul-Objekt, das an den Namen codecs gebunden wird?
Code: Alles auswählen
import codecs
func = codecs.open
func("test.txt")
Nein, das Funktionsobjekt ist an den Namen ``open`` gebunden. An den Namen ``codecs`` ist das Modulobjekt gebunden.ratna_fong hat geschrieben:codecs ist also der Name(Bezeichner), an den das FunktionsOBJEKT open() gebunden wird.