
# PascalCase
class Robot:
    # alle funktionen mit unterstrichen links und rechts müssen exakt so heißen
    def __init__(self, name):
        print(f"Creating a new robot named {name}")
        # sollten immer alle attribute initialisiert werden
        self.name = name

    def say_hi(self):
        print(f"Hello, I'm a robot called {self.name}")

r1 = Robot("Bender")  # führt die init-funktion aus
print(r1.name)
r1.say_hi()  # r1 -> Robot -> Robot.say_hi(r1)
Robot.say_hi(r1)  # wird so nie geschrieben
# Attribute können zu jeder Zeit geändert werden
r1.name = "Calculon"
r1.say_hi()
# 2 eigene Klassen schreiben
# Circle und Rectangle
# radius
# Rectangle hat die Attribute: height, width
# beide Klassen haben die Funktionen:
#   calc_area()        # kreis: pi*radius**2  3.14
#   calc_perimeter()  # 2 * pi * radius
import math
class Circle:
    def __init__(self, radius):
        self.radius = radius
        self.area = 0

    def calc_area(self):
        self.area = 3.14 * self.radius ** 2  # ^,|,& -> binäre operatoren
        return self.area

    def calc_perimeter(self):
        return 2 * 3.14 * self.radius

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def calc_area(self):
        area = self.width * self.height
        return area

    def calc_perimeter(self):
        perimeter = 2 * (self.width + self.height)
        return perimeter

if __name__ == "__main__":
    print("-"*100)
    c1 = Circle(2)
    c2 = Circle(3.2)
    print(c1.radius)
    area = c1.calc_area()  # Circle.calc_area(c1)
    print(area)
    perimeter = c1.calc_perimeter()
    print(perimeter)
    print(c1.calc_area() > c2.calc_area())

    print(c1.radius, c1.area)
    c1.radius += 1  # daran denken die fläche zu berechnen
    print(c1.radius, c1.area)

    r1 = Rectangle(3, 9)
    print(r1.width)
    print(r1.calc_area(), r1.calc_perimeter())

    # inkorrekte Zustände
    r1.width -= 12
    print(r1.calc_area(), r1.calc_perimeter())




    # rectangle ohne oop
    r = [4, 2]  # h, w oder w,h?
    r = {"height": 4, "width": 2}