Heim Backend-Entwicklung Python-Tutorial Wie man Polymorphismus in Python versteht

Wie man Polymorphismus in Python versteht

Jun 18, 2019 am 09:19 AM
python 多态

Python unterstützt keinen Polymorphismus und muss auch keinen Polymorphismus unterstützen. Python ist eine polymorphe Sprache, die Duck Typing befürwortet. Die effektive Semantik eines Objekts wird nicht durch die Vererbung von einer bestimmten Klasse oder die Implementierung einer bestimmten Schnittstelle bestimmt, sondern durch den aktuellen Satz von Methoden und Eigenschaften. Wie man Polymorphismus in Python versteht

Polymorphismus

ist eine Technik, die es ermöglicht, ein übergeordnetes Objekt einem oder mehreren seiner untergeordneten Objekte gleichzusetzen, z. B. Parent:=Child; Mehr Morphismus ermöglicht es, Zeiger derselben Klasse (Basisklasse) zu verwenden, um auf Objekte verschiedener Klassen zu verweisen, und die gleiche Operation je nach referenzierten Objekten auf unterschiedliche Weise auszuführen.

Verwandte Empfehlungen: „Python-Video-Tutorial

class A:
def prt(self):
print("A")
class B(A):
def prt(self):
print("B")
class C(A):
def prt(self):
print("C")
class D(A):
pass
class E:
def prt(self):
print("E")
class F:
pass
def test(arg):
arg.prt()
a = A()
b = B()
c = C()
d = D()
e = E()
f = F()
test(a)
test(b)
test(c)
test(d)
test(e)
test(f)

输出结果

A
B
C
A
E
Traceback (most recent call last):
File "D:/Python/多态1.py", line 45, in <module>
test(f)
File "D:/Python/多态1.py", line 30, in test
arg.prt()
AttributeError: &#39;F&#39; object has no attribute &#39;prt&#39;
Process finished with exit code 1
Nach dem Login kopieren

Auf den ersten Blick scheint es, dass Python Polymorphismus unterstützt und test(a), test(b), test( aufruft) c), Test(d) funktioniert sehr gut, aber das Folgende ist ganz anders.
Beim Aufruf von test(e) ruft Python nur die prt-Methode von e auf und bestimmt nicht, ob e ein Objekt einer Unterklasse von A ist (tatsächlich wird der Typ des Parameters nicht angegeben, wenn die Testmethode definiert wird). , und Python kann es überhaupt nicht bestimmen).
Beim Aufruf von test(f) tritt ein Fehler auf. Der Grund dafür ist sehr einfach.

Erstens unterstützt Python weder Polymorphismus noch muss es Polymorphismus unterstützen. Python ist eine polymorphe Sprache und befürwortet Duck Typing. Das Folgende ist eine Diskussion des Duck-Typings aus Wikipedia:

In der Programmierung ist Duck-Typing ein Stil des dynamischen Tippens. Bei diesem Stil wird die effektive Semantik eines Objekts nicht durch das Erben von einer bestimmten Klasse oder die Implementierung einer bestimmten Schnittstelle bestimmt, sondern durch den aktuellen Satz von Methoden und Eigenschaften. Der Name dieses Konzepts stammt von dem von James Whitcomb Riley vorgeschlagenen Ententest. Der „Ententest“ kann folgendermaßen ausgedrückt werden:

„Wenn Sie einen Vogel sehen, der wie eine Ente geht, schwimmt wie eine Ente, und quakt wie eine Ente, dann kann der Vogel eine Ente genannt werden.“

Beim Duck-Typing liegt der Fokus nicht auf der Art des Objekts selbst, sondern auf der Art und Weise, wie es verwendet wird. Zum Beispiel:
In einer Sprache, die kein Duck-Typing verwendet, können wir eine Funktion schreiben, die ein Objekt vom Typ duck akzeptiert und seine Walk- und Bark-Methoden aufruft.
In einer Sprache, die Duck-Typing verwendet, kann eine solche Funktion ein Objekt jeden Typs akzeptieren und seine Walk- und Call-Methoden aufrufen. Wenn die aufzurufenden Methoden nicht vorhanden sind, wird ein Laufzeitfehler ausgelöst. Die Tatsache, dass jedes Objekt mit den richtigen Walk- und Call-Methoden von einer Funktion akzeptiert werden kann, führt zu der obigen Aussage, daher der Name dieser Art der Typenbestimmung.

Duck Typing profitiert oft davon, die Parametertypen in Methoden und Funktionen nicht zu testen, sondern sich stattdessen auf Dokumentation, klaren Code und Tests zu verlassen, um die korrekte Verwendung sicherzustellen. Benutzer, die von statisch typisierten Sprachen zu dynamisch typisierten Sprachen wechseln, versuchen häufig, eine statische Typprüfung (vor der Laufzeit) hinzuzufügen, wodurch die Vorteile und die Skalierbarkeit des Duck-Typings beeinträchtigt und die dynamische Natur der Sprache eingeschränkt werden.

Es besteht kein Zweifel, dass ein Objekt in Python auch ein Teil des Speichers ist. Zusätzlich zu Attributen und Methoden enthält der Speicher auch den Typ des Objekts. Wir greifen auf das Objekt über Referenzen zu A(). Zuerst erstellt Python ein Objekt A, deklariert dann eine Variable a und ordnet dann die Variable a dem Objekt A zu. Variable a hat keinen Typ, ihr Typ hängt vom zugehörigen Objekt ab. Wenn a = A (), ist a eine Referenz vom Typ A. Wir können sagen, dass a vom Typ A ist. Wenn a der Wert 3 und a = 3 zugewiesen wird, ist a eine Ganzzahlreferenz, aber Python ist nicht schwach. Geben Sie Sprache ein, in Python meldet '2'+3 einen Fehler, während in PHP '2'+3 5 erhält. Es versteht sich, dass Variablen in Python den Zeigern in c ähneln. Der Unterschied zu c besteht darin, dass Variablen in Python auf jeden Typ verweisen können, obwohl dies nicht korrekt ist, ist es einfacher zu verstehen.
Daher ist der Typ des Parameters während des laufenden Python-Prozesses nicht bekannt, bevor der Parameter übergeben wird. Obwohl es sich bei der Methode in Python ebenfalls um eine späte Bindung handelt, unterscheidet sie sich von der polymorphen späten Bindung in Java Die Bindung kennt zumindest den Typ des Objekts, Python kennt jedoch nicht den Typ des Parameters.

Die Testmethode legt lediglich fest, dass sie einen Parameter empfängt und die prt-Methode dieses Parameters aufruft. Wenn dieser Parameter eine PRT-Methode hat, führt Python ihn aus. Wenn nicht, meldet Python einen Fehler, da abcde über eine PRT-Methode verfügt, f jedoch nicht, sodass das obige Ergebnis erhalten wird.

Das obige ist der detaillierte Inhalt vonWie man Polymorphismus in Python versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Kann gegen Code in Windows 8 ausgeführt werden Kann gegen Code in Windows 8 ausgeführt werden Apr 15, 2025 pm 07:24 PM

VS -Code kann unter Windows 8 ausgeführt werden, aber die Erfahrung ist möglicherweise nicht großartig. Stellen Sie zunächst sicher, dass das System auf den neuesten Patch aktualisiert wurde, und laden Sie dann das VS -Code -Installationspaket herunter, das der Systemarchitektur entspricht und sie wie aufgefordert installiert. Beachten Sie nach der Installation, dass einige Erweiterungen möglicherweise mit Windows 8 nicht kompatibel sind und nach alternativen Erweiterungen suchen oder neuere Windows -Systeme in einer virtuellen Maschine verwenden müssen. Installieren Sie die erforderlichen Erweiterungen, um zu überprüfen, ob sie ordnungsgemäß funktionieren. Obwohl VS -Code unter Windows 8 möglich ist, wird empfohlen, auf ein neueres Windows -System zu upgraden, um eine bessere Entwicklungserfahrung und Sicherheit zu erzielen.

Ist die VSCODE -Erweiterung bösartig? Ist die VSCODE -Erweiterung bösartig? Apr 15, 2025 pm 07:57 PM

VS -Code -Erweiterungen stellen böswillige Risiken dar, wie das Verstecken von böswilligem Code, das Ausbeutetieren von Schwachstellen und das Masturbieren als legitime Erweiterungen. Zu den Methoden zur Identifizierung böswilliger Erweiterungen gehören: Überprüfung von Verlegern, Lesen von Kommentaren, Überprüfung von Code und Installation mit Vorsicht. Zu den Sicherheitsmaßnahmen gehören auch: Sicherheitsbewusstsein, gute Gewohnheiten, regelmäßige Updates und Antivirensoftware.

Wählen Sie zwischen PHP und Python: Ein Leitfaden Wählen Sie zwischen PHP und Python: Ein Leitfaden Apr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

So führen Sie Programme in der terminalen VSCODE aus So führen Sie Programme in der terminalen VSCODE aus Apr 15, 2025 pm 06:42 PM

Im VS -Code können Sie das Programm im Terminal in den folgenden Schritten ausführen: Erstellen Sie den Code und öffnen Sie das integrierte Terminal, um sicherzustellen, dass das Codeverzeichnis mit dem Terminal Working -Verzeichnis übereinstimmt. Wählen Sie den Befehl aus, den Befehl ausführen, gemäß der Programmiersprache (z. B. Pythons Python your_file_name.py), um zu überprüfen, ob er erfolgreich ausgeführt wird, und Fehler auflösen. Verwenden Sie den Debugger, um die Debugging -Effizienz zu verbessern.

PHP und Python: Verschiedene Paradigmen erklärt PHP und Python: Verschiedene Paradigmen erklärt Apr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

Kann Visual Studio -Code in Python verwendet werden Kann Visual Studio -Code in Python verwendet werden Apr 15, 2025 pm 08:18 PM

VS -Code kann zum Schreiben von Python verwendet werden und bietet viele Funktionen, die es zu einem idealen Werkzeug für die Entwicklung von Python -Anwendungen machen. Sie ermöglichen es Benutzern: Installation von Python -Erweiterungen, um Funktionen wie Code -Abschluss, Syntax -Hervorhebung und Debugging zu erhalten. Verwenden Sie den Debugger, um Code Schritt für Schritt zu verfolgen, Fehler zu finden und zu beheben. Integrieren Sie Git für die Versionskontrolle. Verwenden Sie Tools für die Codeformatierung, um die Codekonsistenz aufrechtzuerhalten. Verwenden Sie das Lining -Tool, um potenzielle Probleme im Voraus zu erkennen.

Kann VSCODE für MAC verwendet werden Kann VSCODE für MAC verwendet werden Apr 15, 2025 pm 07:36 PM

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

Kann vscode ipynb ausführen Kann vscode ipynb ausführen Apr 15, 2025 pm 07:30 PM

Der Schlüssel zum Ausführen von Jupyter -Notebook im VS -Code liegt darin, sicherzustellen, dass die Python -Umgebung ordnungsgemäß konfiguriert ist, verstehen, dass die Codeausführungsreihenfolge mit der Zellreihenfolge übereinstimmt, und sich der großen Dateien oder externen Bibliotheken bewusst zu sein, die die Leistung beeinflussen können. Die vom VS -Code bereitgestellten Codebetausch- und Debugging -Funktionen können die Codierungseffizienz erheblich verbessern und Fehler verringern.

See all articles