From 9e5606d4645548294358a7f18670ba8fa31207b1 Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Thu, 5 Mar 2026 16:14:59 +0100 Subject: [PATCH 1/3] inheritance with abstract base class --- src/inheritance.py | 114 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/inheritance.py diff --git a/src/inheritance.py b/src/inheritance.py new file mode 100644 index 0000000..ad35d98 --- /dev/null +++ b/src/inheritance.py @@ -0,0 +1,114 @@ +from abc import ABC, abstractmethod + + +class Speaker(ABC): + @abstractmethod + def speak(self): + pass + + +class Sleeper(ABC): + @abstractmethod + def sleep(self): + pass + + +class Dog(Speaker, Sleeper): + def speak(self): + print("Wau") + + def sleep(self): + print("Zzzzz") + + +dog = Dog() +dog.speak() +dog.sleep() + + +class Storage(ABC): + @abstractmethod + def save(self, key: str, value: str) -> None: + pass + + @abstractmethod + def load(self, key: str) -> str: + pass + + +class MemoryStorage(Storage): + def __init__(self): + self.storage = {} + + def save(self, key: str, value: str) -> None: + self.storage.update({key: value}) + + def load(self, key: str) -> str: + return self.storage.get(key) + + +storage: Storage = MemoryStorage() +storage.save("key", "value") +print(storage.load("key")) + + +class Person: + def __init__(self, name: str): + self.name = name + + +class Student(Person): + def __init__(self, name: str, semester: int): + super().__init__(name) + self.semester = semester + + +s = Student("Mein Name", 3) +print(s.name) +print(s.semester) + + +class A: + def ping(self) -> None: + print(" A ") + + +class B(A): + def ping(self) -> None: + print(" B ") + super().ping() + + +class C(A): + def ping(self) -> None: + print(" C ") + super().ping() + + +class D(B, C): + pass + + +D().ping() + + +class Animal(ABC): + @abstractmethod + def speak(self): + return "..." + + def chorus(self, n: int): + if n <= 0: + raise ValueError(" n muss positiv sein ") + return " ".join(self.speak() for _ in range(n)) + + +class Cat(Animal): + def speak(self): + return super().speak() + + def chorus(self, n: int): + return super().chorus(n) + + +print(Cat().chorus(3)) From 986a26890a5b0ebd04cdaa2e86f5c4b4d498ebe9 Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Thu, 12 Mar 2026 11:54:10 +0100 Subject: [PATCH 2/3] =?UTF-8?q?sw3=20=C3=9Cbungen,=20codewars=20MenuDispla?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/codewars/MenuDisplay.py | 37 +++++++++++++++++++++++++++++++++ src/codewars/__main__.py | 4 ++++ src/dog.py | 41 +++++++++++++++++++++++++------------ 3 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 src/codewars/MenuDisplay.py create mode 100644 src/codewars/__main__.py diff --git a/src/codewars/MenuDisplay.py b/src/codewars/MenuDisplay.py new file mode 100644 index 0000000..e5af845 --- /dev/null +++ b/src/codewars/MenuDisplay.py @@ -0,0 +1,37 @@ +class Menu: + def __init__(self, selects: list): + self.selects = selects + self.cursor = 0 + + def to_the_right(self): + self.cursor = (self.cursor + 1) % len(self.selects) + + def to_the_left(self): + self.cursor = (self.cursor - 1) % len(self.selects) + + def display(self): + return ( + "[" + + ", ".join( + [ + f"'{s}'" if i != self.cursor else f"['{s}']" + for i, s in enumerate(self.selects) + ] + ) + + "]" + ) + + +if __name__ == "__main__": + menu = Menu(["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]) + + print(menu.display()) + menu.to_the_right() + print(menu.display()) + menu.to_the_left() + menu.to_the_left() + menu.to_the_left() + print(menu.display()) + menu.to_the_left() + menu.to_the_left() + print(menu.display()) diff --git a/src/codewars/__main__.py b/src/codewars/__main__.py new file mode 100644 index 0000000..8ccf9e1 --- /dev/null +++ b/src/codewars/__main__.py @@ -0,0 +1,4 @@ +from codewars.lastDigitOfHugeNumber import last_digit + +if __name__ == "__main__": + print(last_digit([1, 2, 3, 4, 5])) diff --git a/src/dog.py b/src/dog.py index 257c1c4..d9bdf4a 100644 --- a/src/dog.py +++ b/src/dog.py @@ -1,16 +1,15 @@ -class Dog: +from abc import ABC, abstractmethod + + +class Dog(ABC): amount_of_dogs = 0 name: str - race: str age: int weight: float bark_sound: str - def __init__( - self, name: str, race: str, age: int, weight: float, bark_sound: str - ) -> None: + def __init__(self, name: str, age: int, weight: float, bark_sound: str) -> None: self.name = name - self.race = race self.age = age self.weight = weight self.bark_sound = bark_sound @@ -18,10 +17,11 @@ class Dog: Dog.amount_of_dogs += 1 def __str__(self): - return f"{self.name} is a {self.age} year old {self.race}" + return f"{self.name} is a {self.age} year old {self.__class__.__name__}" + @abstractmethod def bark(self, times: int = 1) -> str: - return f"{self.name} says:" + (f" {self.bark_sound}" * times) + pass def birthday(self) -> str: self.age += 1 @@ -30,21 +30,35 @@ class Dog: def is_puppy(self) -> bool: return self.age < 2 + def __eq__(self, other): + return self.name == other.name + class Shepperd(Dog): - race: str = "shepperd" bark_sound: str = "Woo!" def __init__(self, name: str, age: int, weight: float) -> None: - Dog.__init__(self, name, Shepperd.race, age, weight, Shepperd.bark_sound) + Dog.__init__(self, name, age, weight, Shepperd.bark_sound) + + def bark(self, times: int = 1) -> str: + return f"{self.name} says:" + (f" {self.bark_sound}" * times) class Poodle(Dog): - race: str = "poodle" bark_sound: str = "Wow!" def __init__(self, name: str, age: int, weight: float) -> None: - Dog.__init__(self, name, Poodle.race, age, weight, Poodle.bark_sound) + Dog.__init__(self, name, age, weight, Poodle.bark_sound) + + def bark(self, times: int = 1) -> str: + return f"{self.name} says:" + (f" {self.bark_sound}" * times) + + +class Bulldog(Dog): + bark_sound: str = "WUUUU!" + + def __init__(self, name: str, age: int, weight: float) -> None: + Dog.__init__(self, name, age, weight, Bulldog.bark_sound) dog1 = Shepperd("Bello", 5, 22.5) @@ -53,7 +67,8 @@ print(dog1.bark()) print(dog1.birthday()) print(Dog.amount_of_dogs) -dog2 = Poodle("Barky", 10, 20) +dog2 = Poodle("Bello", 10, 20) print(dog2.bark(3)) print(dog2.is_puppy()) print(Dog.amount_of_dogs) +print(dog2 == dog1) From 7fc5e59d5bc2238b8f24c48cbb6c4a7bbf10fab5 Mon Sep 17 00:00:00 2001 From: schaermicha1 Date: Thu, 12 Mar 2026 11:58:45 +0100 Subject: [PATCH 3/3] move to class module --- src/{ => class}/__init__.py | 0 src/{ => class}/classes.py | 0 src/{ => class}/dog.py | 0 src/{ => class}/inheritance.py | 0 src/{ => class}/moduleA.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename src/{ => class}/__init__.py (100%) rename src/{ => class}/classes.py (100%) rename src/{ => class}/dog.py (100%) rename src/{ => class}/inheritance.py (100%) rename src/{ => class}/moduleA.py (100%) diff --git a/src/__init__.py b/src/class/__init__.py similarity index 100% rename from src/__init__.py rename to src/class/__init__.py diff --git a/src/classes.py b/src/class/classes.py similarity index 100% rename from src/classes.py rename to src/class/classes.py diff --git a/src/dog.py b/src/class/dog.py similarity index 100% rename from src/dog.py rename to src/class/dog.py diff --git a/src/inheritance.py b/src/class/inheritance.py similarity index 100% rename from src/inheritance.py rename to src/class/inheritance.py diff --git a/src/moduleA.py b/src/class/moduleA.py similarity index 100% rename from src/moduleA.py rename to src/class/moduleA.py