int, str, float, etc.) oder Klassen → z.B.: type(id_number) == intclass Robot():
# Definition des Konstruktors = Beschreibung der Klasse
def __init__(self, id_number, max_speed_kmh):
# Genau diesem erstellen Objekt selbst
# Weisen wir als Größe die übergebene Größe zu
self.id_number = id_number
self.max_speed_kmh = max_speed_kmh
__init__() ist der Konstruktor und wird aufgerufen, sobald ein Objekt einer Klasse instanziiert wirdself → referenziert auf das Objekt selbst und wird immer genutzt, wenn wir ein Attribut oder Methode genau dieses Objektes ansprechen wollen → wie der Zeiger this in C++id_number und max_speed_kmh# Aufruf des Konstruktors = Instanziierung des Objekts
number5 = Robot(5, 20)
r2d2 = Robot(147, 32)
Robot beschreibt allgemein das Verhalten jedes RobotersRobot angelegtself als erstem Parameterclass Robot():
# [...]
def communicate(self):
print(f"Hi, my ID is {self.id_number}")
# [...]
# Instanziierung eines Roboters
number5 = Robot(5, 20)
# Aufruf einer Methode des Roboters number5
number5.communicate()
#> "Hi, my ID is 5"
<objekt_name>.<attribut_name>print(r2d2.max_speed_kmh)
# > 32
<objekt_name>.<methoden_name>()self Zugriff auf alle Attributeclass Robot():
# [...]
def set_max_speed_kmh(self, max_speed_kmh):
self.max_speed_kmh = max_speed_kmh
# Python
class Robot():
# Definition des Konstruktors = Beschreibung der Klasse
def __init__(self, id_number, max_speed_kmh, dist_to_wall_cm):
self.id_number = id_number
self.max_speed_kmh = max_speed_kmh
self.dist_to_wall_cm = dist_to_wall_cm
communicate() an, in der sich der Roboter mittels print() Statement identifiziert (seine ID nennt)calc_time_till_impact() an, die die aktuelle Geschwindigkeit als Parameter übernimmt und die Zeit bis zum Impact errechnet. Wird keine Geschwindigkeit übergeben, so wird mit der Maximalgeschwindigkeit gerechnetcommunicate_with_time()calc_time_till_impact() Methode aufnummer5 an und testen Sie die Methodenoop_robot_simple.pyself.dist_to_wall_cmmax_speed_ms = self.max_speed_kmh / 3.6self.__ip_address = "192.23.31.223"__ip_address und Methode __print_ip_address() nach außen versteckt_oop_robot.pyclass Robot():
def __init__(self, name, ip):
self.name = name
self.__ip = ip
def print_robot(self):
print(f"Created new robot {self.name} with ip {self.__ip}!")
robot_1 = Robot("Bob", "192.23.31.223")
robot_1.print_robot()
#> Created new robot Bob with ip 192.23.31.223!
robot_1.__ip
#> 'Robot' object has no attribute '__ip'
oop_robot.pyclass Robot():
def __init__(self, name, ip):
self.name = name
self.__ip = ip
# Getter
def get_ip(self):
return self.__ip
# Setter
def set_ip(self, new_ip):
self.__ip = new_ip
print("IP changed!")
robot_1 = Robot("Bob", "192.23.31.224")
robot_1.set_ip("192.1.1.1")
__name__+) wird kontext-abhängig unterschiedlich interpretiertprint("foo"+"ba"): Strings werden verknüpftprint(2+2): Integers werden addiert__add__oop_robot.pyclass Robot():
def __init__(self, name, ip):
self.name = name
self.__ip = ip
# Getter
def get_ip(self):
return self.__ip
# Setter
def set_ip(self, new_ip):
self.__ip = new_ip
print("IP changed!")
robot_1 = Robot("Bob", "192.023.31.224")
# Per Default wird ein Object wenn es geprinted wird
# Zunächst als String dargestellt - z.B. mit Adresse
print(robot_1)
#> <__main__.Robot object at 0x000002015D0A6D40>
__str__() aber auch überschreiben:oop_robot.pyclass Robot():
def __init__(self, name, ip):
self.name = name
self.__ip = ip
def get_ip(self):
return self.__ip
def set_ip(self, new_ip):
self.__ip = new_ip
print("IP changed!")
#Dunder-Methode
def __str__(self):
return f"I am {self.name} the robot!"
robot_1 = Robot("Bob", "192.023.31.224")
print(robot_1)
#> I am Bob the robot!
dir(<class_name>)``` --- title: --- classDiagram class MovingAverageProcessor{ + int window_size + process(DataConatiner) DataConatiner + get_parameter() int } class RMSEProcessor{ + float rmse + process(DataConatiner, DataConatiner) + get_parameter() float } namespace DataProcessors{ class MovingAverageProcessor class RMSEProcessor } ```