Seite 1 von 1

Neue Methode für ein vorhandenes Objekt erstellen

Verfasst: Montag 11. Mai 2009, 12:56
von 4bit
Hallo,

Ich möchte einem vorhandenen Objekt (dem Canvas aus Tkinter) eine eigene Methode anhängen. Wie sieht die Definition dafür aus?

Grüße,
4bit-

Verfasst: Montag 11. Mai 2009, 13:03
von Birne94
Du leitest einfach eine Klasse ab...

Code: Alles auswählen

class MyCanvas(Tkinter.Canvas):
    def my_func(self, arg1, arg2):
        # blah

Verfasst: Montag 11. Mai 2009, 13:13
von 4bit
Kann ich auch der vorhandenen Klasse eine Methode anfügen?

Verfasst: Montag 11. Mai 2009, 13:14
von Dill
ja, einer instanz (klasse weiss ich nicht) aber das ist (meist) eher unfug.

was hast du gegen eine ableitung?

Verfasst: Montag 11. Mai 2009, 13:20
von 4bit
D.h. Klasse ableiten ist der übliche Weg einer vorhandenen Klasse eine Methode anzuhängen?

Gibt es eine Möglichkeit einer vorhandenen Klasse eine Methode anzuhängen?

Grüße,
4bit.

Verfasst: Montag 11. Mai 2009, 13:24
von DasIch
Es geht über Umwege allerdings sollte man das nicht tun.

Verfasst: Montag 11. Mai 2009, 13:47
von 4bit
Ich muss schon sagen, besonders erklärungswillig und argumentativ seid ihr ja nicht. Zumindest kenne ich jetzt eure Meinung.

Verfasst: Montag 11. Mai 2009, 13:56
von Leonidas
Dann stell doch mal die Frage nach der Erklärung wenn es dich interessiert. Oder lies selbst nach. Stichwort: Monkey Patching.

Verfasst: Montag 11. Mai 2009, 13:57
von DasIch
Die Klasse gehört zu Tkinter und ist dort dokumentiert und jeder erwartet dementsprechendes Verhalten, veränderst du dass ist dass "überraschend" und deswegen kein gutes Design also lass es sein. Erstell einfach eine Subklasse und arbeite damit.

Verfasst: Montag 11. Mai 2009, 13:58
von helduel
Moin,

einfach zuweisen. Das funktioniert aber nicht mit builtins.

Code: Alles auswählen

class Foo(object):
    pass

f = Foo()
f.bar()

def methode(self):
    print "bar"

Foo.bar = methode

f.bar()
Gruß,
Manuel

Verfasst: Montag 11. Mai 2009, 14:02
von DasIch
helduel hat geschrieben:Das funktioniert aber nicht mit builtins.
Man kann dass mit ctypes über die C-API machen.

Verfasst: Montag 11. Mai 2009, 14:20
von 4bit
Eine Ableitung

Code: Alles auswählen

MyCanvas
funktioniert super.

Danke,
4bit.