from abc import ABC, abstractmethod from enum import Enum class Baustein(ABC): def __init__(self, farbe, breite, hoehe): self.farbe = farbe self.breite = breite self.hoehe = hoehe def beschreibung(self): print(f"ich bin ein stein(f{self.farbe}b{self.breite}h{self.hoehe})") @abstractmethod def verbinden(): pass class C2x4Stein(Baustein): def __init__(self, farbe): super().__init__(farbe, 4, 1) def verbinden(self): print("2x4") class Fliese(Baustein): def __init__(self, farbe, breite): super().__init__(farbe, breite, 0.5) def verbinden(self): print("oben nicht aber flach") class Platte(Baustein): def __init__(self, farbe, breite): super().__init__(farbe, breite, 0.5) def verbinden(): print("oben aber flach") def zeige_baustein_info(baustein: Baustein): baustein.beschreibung() baustein.verbinden() meinstein = C2x4Stein("gelb") meinepfließe = Fliese("grün", 3) zeige_baustein_info(meinstein) zeige_baustein_info(meinepfließe) class Bausteintyp(Enum): BRICK2X4 = 0 FLIESE = 1 PLATTE = 2 class BausteinBuilder(Baustein): bausteintyp = None farbe: str breite: int hoehe: int def set_brick(self, braustein): self.baustein = braustein return self def set_farbe(self, farbe): self.farbe = farbe return self def set_breite(self, breite): self.breite = breite return self def set_hoehe(self, breite): self.hoehe = breite return self def build(self): if self.bausteintyp == Bausteintyp.BRICK2X4: return C2x4Stein(self.farbe) if self.bausteintyp == Bausteintyp.FLIESE: return Fliese(self.farbe, self.breite) if self.bausteintyp == Bausteintyp.PLATTE: return Fliese(self.farbe, self.breite) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = ( BausteinBuilder.set_brick(Bausteintyp.PLATTE) .set_farbe("hi") .set_breite(5) .set_hoehe(3.6) .build() )