Polymorfism och duck typing
Skriv polymorf kod som fungerar med alla kompatibla objekt.
Polymorfism och duck typing är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.
Introduktion
Vad är polymorfism?
class Cat:
def speak(self): return 'Meow'
class Dog:
def speak(self): return 'Woof'
for animal in [Cat(), Dog()]:
print(animal.speak())Duck typing
class Duck:
def quack(self): return 'Quack'
class Person:
def quack(self): return 'I am quacking like a duck'
def make_it_quack(duck):
print(duck.quack())
make_it_quack(Duck())
make_it_quack(Person())Polymorfa funktioner
for obj in ['hello', [1,2,3], {'a':1}]:
print(type(obj).__name__, len(obj))Operatoröverlagring
print(1 + 2) # int addition
print('a' + 'b') # string concat
print([1] + [2]) # list concatProtokollbaserad duck typing
class Squares:
def __init__(self, n): self.n,self.i=n,0
def __iter__(self): return self
def __next__(self):
if self.i>=self.n: raise StopIteration
x=self.i**2; self.i+=1; return x
print(list(Squares(5)))EAFP kontra LBYL
# LBYL:
if hasattr(obj, 'quack'):
obj.quack()
# EAFP (Pythonic):
try:
'hello'.quack()
except AttributeError:
print('no quack')isinstance() för säker dispatch
def process(data):
if isinstance(data, str):
return data.upper()
elif isinstance(data, list):
return [x*2 for x in data]
print(process('hi'))
print(process([1,2,3]))Abstrakta basklasser som protokoll
from abc import ABC, abstractmethod
class Drawable(ABC):
@abstractmethod
def draw(self): pass
class Circle(Drawable):
def draw(self): print('O')
Circle().draw()typing.Protocol (3.8+)
from typing import Protocol
class Quackable(Protocol):
def quack(self) -> str: ...
def make_quack(x: Quackable) -> str:
return x.quack()
print('protocol demo')Polymorfism i praktiken
class JSONSerializer:
def serialize(self, obj): import json; return json.dumps(obj)
class XMLSerializer:
def serialize(self, obj): return f'<data>{obj}</data>'
def export(data, serializer):
return serializer.serialize(data)
print(export({'x': 1}, JSONSerializer()))Snabb kontroll
Sammanfattning
Fortsätt
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 76
- Lektioner
- 320
Vanliga frågor
Är lektionen ”Polymorfism och duck typing” gratis?
Ja – hela texten till ”Polymorfism och duck typing” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Polymorfism och duck typing”?
Skriv polymorf kod som fungerar med alla kompatibla objekt. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Python Academy?
Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Polymorfism och duck typing”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Python Academy-lektionen?
Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Enkel arvshierarki
- Åsidosätta metoder och super()
- Multipelt arv och MRO
- Polymorfism och duck typing