Hat Python Erweiterungsmethoden wie C#? Ist es möglich, eine Methode, wie zu nennen:Erweiterungsmethoden in Python
MyRandomMethod()
auf bestehende Typen wie int
?
myInt.MyRandomMethod()
Hat Python Erweiterungsmethoden wie C#? Ist es möglich, eine Methode, wie zu nennen:Erweiterungsmethoden in Python
MyRandomMethod()
auf bestehende Typen wie int
?
myInt.MyRandomMethod()
Sie stellt klar, kann Methoden hinzufügen, die Sie für Klassenobjekte mögen, die in Python-Code (AKA-Affe-Patching) definiert sind:
Dies funktioniert nicht für integrierte Typen, da deren nicht beschreibbar ist (es ist ein dictproxy
).
Also nein, es gibt keinen "echten" Erweiterungsmethodenmechanismus in Python.
Je länger ich Python verwende, desto besser wird es! –
nicht sicher, ob das, was Sie fragen, aber Sie können bestehende Typen erweitern und rufen Sie dann, was Sie auf der neuen Sache mag:
class int(int):
def random_method(self):
return 4 # guaranteed to be random
v = int(5) # you'll have to instantiate all you variables like this
v.random_method()
class int(int):
def xkcd(self):
import antigravity
print(42)
>>>v.xkcd()
Traceback (most recent call last):
File "<pyshell#81>", line 1, in <module>
v.xkcd()
AttributeError: 'int' object has no attribute 'xkcd'
c = int(1)
>>> c.random_method()
4
>>> c.xkcd()
42
Hoffnung, dass Ihre Frage
Aber ich meine direkt auf vorhandene Typen aufrufen, nicht MyInt, aber Int. Also wie v = 5; v.RandomMethod(); –
Sie können die Klasse int (int) aufrufen, aber Sie müssten die Variable instanziieren wie: v = int (5) – SilentGhost
Nice XKCD Referenz. –
Eine andere Option ist das Überschreiben der Meta-Klasse. Damit können Sie unter anderem Funktionen angeben, die in allen Klassen existieren sollen.
Dieser Artikel beginnt es zu diskutieren:
http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html
Funktioniert das für eingebaute Typen wie int? –
Ich glaube nicht, dass Metaklassen Ihnen die Möglichkeit geben, integrierte Typen zu ändern. –
Das stimmt, es kann nur das Verhalten von Klassen ändern. – tsellon
ich großes Glück mit dem hier beschriebenen Verfahren gehabt haben:
http://mail.python.org/pipermail/python-dev/2008-January/076194.html
Ich habe keine Ahnung, ob es auf builtins funktioniert obwohl.
Leider funktionieren beide Methoden nicht auf Einbauten. – ESV
klingt wie "Affe flicken" – hop