Seite 1 von 1

OOP mit Python

Verfasst: Mittwoch 30. Mai 2018, 14:50
von maxwebbi
Hallo zusammen,

ich beschäftige mich seit heute mit OOP in Python und habe mal ein paar Fragen:

Angenommen ich habe folgende Klasse:

Code: Alles auswählen

class Car():
	
	tires = 4
	
   	def __init__(self):
       		self.price = 5000
       		
Erstelle ich immer auf die Art und Wiese mit

Code: Alles auswählen

MeinObjekt.MeineInstanzVariable = ...
eine Instanzvariable?

In meinem Beispiel ist "tires" ja eine statische Variable und man kann über "Car.tires" draufzugreifen. Was würde passieren, wenn ich folgendes machen würde:

Code: Alles auswählen

class Car():
	
   	def __init__(self):
   		tires = 4
       		self.price = 5000
       		
Meine statische Variable "tires" würde also jedes mal beim Erstellen einer neuen Instanz auf 4 gesetzt werden. Macht zwar keinen Sinn, aber rein hypothetisch?!
Über "Car.tires" kann ich ja nun nicht mehr drauf zugreifen. Gibt es ein Szenario, in dem man sowas machen würde?

Danke! :)

Re: OOP mit Python

Verfasst: Mittwoch 30. Mai 2018, 15:11
von Sirius3
Eingerückt wird generell mit 4 Leerzeichen, dann ist der Code auch lesbar. `tires` ist im ersten Fall eine Klassenvariable, statische Variablen gibt es nicht. Im zweiten Fall ist `tires` eine lokale Variable und `price` eine Instanzvariable.

Und "von außen" sollte man gar keine Instanzvariablen erzeugen. Alle Instanzvariablen, die ein Objekt braucht, werden in `__init__` initialisiert.

Re: OOP mit Python

Verfasst: Mittwoch 30. Mai 2018, 15:24
von ThomasL
da es ja auch Autos mit weniger als 4 Rädern gibt, könnte man es ja so machen
default sind 4 Räder, man kann aber auch andere Werte angeben
Es gibt vielleicht Gründe für die Verwendung von Klassenvariablen oder lokalen Variablen in Klassen, in diesem Beispiel mMn eher nicht

Code: Alles auswählen

class Car():
    def __init__(self, price, tires=4)):
        self.tires = tires
       	self.price = price

dreirad = Car(100, 3)
mercedes = Car(50000)


Re: OOP mit Python

Verfasst: Mittwoch 30. Mai 2018, 15:39
von maxwebbi
Sirius3 hat geschrieben: Mittwoch 30. Mai 2018, 15:11 Eingerückt wird generell mit 4 Leerzeichen, dann ist der Code auch lesbar. `tires` ist im ersten Fall eine Klassenvariable, statische Variablen gibt es nicht. Im zweiten Fall ist `tires` eine lokale Variable und `price` eine Instanzvariable.

Und "von außen" sollte man gar keine Instanzvariablen erzeugen. Alle Instanzvariablen, die ein Objekt braucht, werden in `__init__` initialisiert.

Das heißt in meinem zweiten Fall ist 'tires' nur für interne Berechnungen oder ähnliches benutzbar und von außen gar nicht anzusprechen?

Re: OOP mit Python

Verfasst: Mittwoch 30. Mai 2018, 16:27
von Sirius3
Ja, so wie lokale Variablen innerhalb beliebiger Funktionen nur innerhalb der Funktion gültig sind.