Wie kann ich integrierte Python-Typen mit benutzerdefinierten Methoden und Attributen erweitern?

Patricia Arquette
Freigeben: 2024-10-24 17:01:02
Original
375 Leute haben es durchsucht

How can I extend built-in Python types with custom methods and attributes?

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 Subclassing und Namespace-Ersetzung

Während Sie den ursprünglichen Typ nicht direkt erweitern können, gibt es 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:

<code class="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'</code>
Nach dem Login kopieren

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.

Das obige ist der detaillierte Inhalt vonWie kann ich integrierte Python-Typen mit benutzerdefinierten Methoden und Attributen erweitern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!