int
, str
, float
, etc.) oder Klassen → z.B.: type(id_number) == int
# Python
class 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 = 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 Methodenself.dist_to_wall_cm
max_speed_ms = self.max_speed_kmh / 3.6
self.__ip_address = "192.23.31.223"
__ip_address
und Methode __print_ip_address()
nach außen versteckt_
oop_robot.py
class 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.py
class 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.py
class 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.py
class 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 } ```