Seite 1 von 1

Funktionalität von Objekt erweitern

Verfasst: Montag 17. Oktober 2016, 11:57
von template
Gibt es in Python eine saubere Lösung, um die Funktionalität von Python-Objekten zu erweitern wenn man auf den Typ der Konstruktion keinen Einfluss hat? Ungefähr so in der Art:

Code: Alles auswählen

from xml.etree import ElementTree
# ....
def SubFunc():
  result = ElementTree.XML(data)
  result.dump = lambda: ElementTree.dump(result)
  return result
  
def OtherFunc():
  result = SubFunc()
  result.dump()

Re: Funktionalität von Objekt erweitern

Verfasst: Montag 17. Oktober 2016, 12:11
von BlackJack
@template: Allgemein, nein. Das scheitert schon daran das man nicht bei jedem Objekt Attribute setzen kann.

Man kann sich recht leicht Wrapper/Proxy-Objekte basteln die alle Attributzugriffe die das Objekt selbst nicht kennt an ein gekapseltes Objekte weiter reicht. Würde ich aber nur machen wenn das wirklich nötig ist, also in Deinem Beispiel nicht, denn dort könnte man in `other_func()` ja einfach die `dump()`-Funktion aufrufen, denn es ist bekannt/garantiert, dass die mit dem `result` funktioniert.