Neue Methode für ein vorhandenes Objekt erstellen

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
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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-
Birne94
User
Beiträge: 90
Registriert: Freitag 28. November 2008, 15:18
Kontaktdaten:

Du leitest einfach eine Klasse ab...

Code: Alles auswählen

class MyCanvas(Tkinter.Canvas):
    def my_func(self, arg1, arg2):
        # blah
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Kann ich auch der vorhandenen Klasse eine Methode anfügen?
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

ja, einer instanz (klasse weiss ich nicht) aber das ist (meist) eher unfug.

was hast du gegen eine ableitung?
http://www.kinderpornos.info
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Es geht über Umwege allerdings sollte man das nicht tun.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Ich muss schon sagen, besonders erklärungswillig und argumentativ seid ihr ja nicht. Zumindest kenne ich jetzt eure Meinung.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann stell doch mal die Frage nach der Erklärung wenn es dich interessiert. Oder lies selbst nach. Stichwort: Monkey Patching.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

helduel hat geschrieben:Das funktioniert aber nicht mit builtins.
Man kann dass mit ctypes über die C-API machen.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Eine Ableitung

Code: Alles auswählen

MyCanvas
funktioniert super.

Danke,
4bit.
Antworten