Erweiterung integrierter Python-Typen mit benutzerdefinierten Methoden und Attributen
In Python stoßen Sie möglicherweise auf Szenarien, in denen Sie integrierte Python-Typen erweitern möchten. in Typen mit zusätzlichen Methoden oder Attributen. Eine direkte Änderung dieser Typen ist jedoch nicht zulässig.
Wenn Sie beispielsweise versuchen, eine helloWorld()-Methode zum Typ dict hinzuzufügen, wie in JavaScript gezeigt, werden Sie feststellen, dass ein solcher Ansatz nicht unterstützt wird.
Problemumgehung durch Unterklassenbildung und Namespace-Ersetzung
Sie können den ursprünglichen Typ zwar nicht direkt erweitern, es gibt jedoch eine clevere Problemumgehung. Indem Sie den Zieltyp in eine Unterklasse unterteilen und ihn anschließend innerhalb des integrierten/globalen Namespace ersetzen, können Sie das gewünschte Verhalten effektiv nachahmen.
Hier ist eine Implementierung in Python:
# Built-in namespace
import __builtin__
# Extended subclass
class mystr(str):
def first_last(self):
if self:
return self[0] self[-1]
else:
return ''
# Substitute the original str with the subclass on the built-in namespace
__builtin__.str = mystr
print(str(1234).first_last()) # 14
print(str(0).first_last()) # 00
print(str('').first_last()) # ''
# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last()) # AttributeError: 'str' object has no attribute 'first_last'
In diesem Beispiel erweitert die mystr-Unterklasse den str-Typ durch Hinzufügen einer first_last()-Methode. Die __builtin__.str-Zuweisung leitet alle integrierten str-Aufrufe um, um stattdessen die geänderte Unterklasse zu verwenden. Infolgedessen verfügen Objekte, die mit dem integrierten str()-Konstruktor instanziiert wurden, jetzt über die Methode first_last().
Es ist jedoch wichtig zu beachten, dass Objekte, die mit literaler Syntax („string“) erstellt wurden, Instanzen von bleiben der unveränderte str-Typ und erbt die benutzerdefinierten Methoden nicht.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3