Polymorphie

Manchmal kommt ein Objekt in viele formen. Zum Beispiel, es gibt viele Sorten Schaltfläche aber sie haben dasselbe verhalten. Kurz: alle Schaltflächen haben ein onClick() Funktion aber die Schaltfläche sehen nicht alle dasselbe aus. Dieser Idee wird Polymorphie genannt.

Das Wort Polymorphie ist basiert auf Griechische Worten Poly (viele) und Morphism (formen).

Polymorphie mit einer Funktion

Wir machen zwei Klassen: Bear und Dog, beiden können ’sprechen‘. Wir machen zwei Instanzen von diesen Klassen und rufen der Methode sound() an.

class Bear(object):
    def sound(self):
        print("Groarrr")
 
class Dog(object):
    def sound(self):
        print("Woof woof!")
 
def makeSound(animalType):
    animalType.sound()
 
 
bearObj = Bear()
dogObj = Dog()
 
makeSound(bearObj)
makeSound(dogObj)

Polymorphie mit einer abstrakten Klasse

Als Sie einen editor macht wissen Sie nicht ob der User ein PDF oder Word Dokument offenen möchtest. Alle Dokumenten brauchen dasselbe Funktionalität: zeigen, schließen usw.

for document in documents:
    print(document.name + ': ' + document.show())

Wir definieren eine (abstrakte) Klasse genannt Dokument. Dieser Klasse ist abstrakt: es definiert nur die Struktur. Wir definieren einer Funktion show() das durch beide Klassen PdfDocument und WordDocument implementiert wird.

class Document:
    def __init__(self, name):    
        self.name = name
 
    def show(self):             
        raise NotImplementedError("Subclass must implement abstract method")
 
class Pdf(Document):
    def show(self):
        return 'Show pdf contents!'
 
class Word(Document):
    def show(self):
        return 'Show word contents!'
 
documents = [Pdf('Document1'),
             Pdf('Document2'),
             Word('Document3')]
 
for document in documents:
    print(document.name + ': ' + document.show())


Wir haben ein abstrakten Struktur(document) und verschiedene Klassen die dieser Struktur implementieren. Wenn Sie ein neuen Type Dokument machen möchtest, kannst du einfach die Struktur von der Klasse Dokument benutzen.

Schreibe einen Kommentar