Skip to content

Commit 4640068

Browse files
committed
Sample code for the Duck typing article
1 parent c222590 commit 4640068

12 files changed

Lines changed: 261 additions & 0 deletions

File tree

duck-typing-python/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Duck Typing in Python: Writing Flexible and Decoupled Code
2+
3+
This folder provides the code examples for the Real Python tutorial [Duck Typing in Python: Writing Flexible and Decoupled Code](https://realpython.com/duck-typing-python/).

duck-typing-python/birds.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Duck:
2+
def swim(self):
3+
print("Duck is swimming.")
4+
5+
def fly(self):
6+
print("Duck is flying.")
7+
8+
9+
class Swan:
10+
def swim(self):
11+
print("Swan is swimming.")
12+
13+
def fly(self):
14+
print("Swan is flying.")
15+
16+
17+
class Albatross:
18+
def swim(self):
19+
print("Albatross is swimming.")
20+
21+
def fly(self):
22+
print("Albatross is flying.")

duck-typing-python/cars_abc.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from abc import ABC, abstractmethod
2+
3+
4+
class Vehicle(ABC):
5+
def __init__(self, make, model, color):
6+
self.make = make
7+
self.model = model
8+
self.color = color
9+
10+
@abstractmethod
11+
def start(self):
12+
raise NotImplementedError("This method must be implemented")
13+
14+
@abstractmethod
15+
def stop(self):
16+
raise NotImplementedError("This method must be implemented")
17+
18+
@abstractmethod
19+
def drive(self):
20+
raise NotImplementedError("This method must be implemented")
21+
22+
23+
class Car(Vehicle):
24+
def start(self):
25+
print("Car is starting")
26+
27+
def stop(self):
28+
print("Car is stopping")
29+
30+
def drive(self):
31+
print("Car is driving")
32+
33+
34+
class Truck(Vehicle):
35+
def start(self):
36+
print("Truck is starting")
37+
38+
def stop(self):
39+
print("Truck is stopping")
40+
41+
def drive(self):
42+
print("Truck is driving")

duck-typing-python/cars_duck.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Car:
2+
def __init__(self, make, model, color):
3+
self.make = make
4+
self.model = model
5+
self.color = color
6+
7+
def start(self):
8+
print("Car is starting")
9+
10+
def stop(self):
11+
print("Car is stopping")
12+
13+
def drive(self):
14+
print("Car is driving")
15+
16+
17+
class Truck:
18+
def __init__(self, make, model, color):
19+
self.make = make
20+
self.model = model
21+
self.color = color
22+
23+
def start(self):
24+
print("Truck is starting")
25+
26+
def stop(self):
27+
print("Truck is stopping")
28+
29+
def drive(self):
30+
print("Truck is driving")

duck-typing-python/file.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
name,age,job
2+
John,25,Engineer
3+
Jane,22,Designer

duck-typing-python/file.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"name": "John",
4+
"age": 25,
5+
"job": "Engineer"
6+
},
7+
{
8+
"name": "Jane",
9+
"age": 22,
10+
"job": "Designer"
11+
}
12+
]

duck-typing-python/file.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
John
2+
25
3+
Engineer
4+
Jane
5+
22
6+
Designer

duck-typing-python/iteration.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
numbers = [1, 2, 3, 4]
2+
person = ("Jane", 25, "Python Dev")
3+
letters = "abcdef"
4+
ordinals = {"one": "first", "two": "second", "three": "third"}
5+
even_digits = {2, 4, 6, 8}
6+
collections = [numbers, person, letters, ordinals, even_digits]
7+
8+
for collection in collections:
9+
for value in collection:
10+
print(value)

duck-typing-python/mean.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from collections.abc import Collection
2+
3+
4+
def mean(sample: Collection) -> float:
5+
return sum(sample) / len(sample)

duck-typing-python/queues.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from collections import deque
2+
3+
4+
class Queue:
5+
def __init__(self):
6+
self._elements = deque()
7+
8+
def enqueue(self, element):
9+
self._elements.append(element)
10+
11+
def dequeue(self):
12+
return self._elements.popleft()
13+
14+
def __iter__(self):
15+
return iter(self._elements)
16+
17+
def __len__(self):
18+
return len(self._elements)
19+
20+
def __reversed__(self):
21+
return reversed(self._elements)
22+
23+
def __contains__(self, element):
24+
return element in self._elements

0 commit comments

Comments
 (0)