Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich integrierte Python-Typen mit benutzerdefinierten Methoden und Attributen erweitern?
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>
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!