Seite 1 von 1
Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 14:00
von MarcNAV
Hab mich mal an die Klassen-Methodik rangewagt und nach langem recherschieren im Internet kein einfach verständliches Beispiel gefunden. Ich versteh in dem unteren Besipiel nicht wie ich den Radius der Pizza in meiner main() Funktion ausgeben lasse. Würde mich schon als Beginner bezeichnen und steh irgendwie auf dem Schlauch.
Code: Alles auswählen
class Pizza(object):
#Attribut
radius = 42
def get_radius(cls):
return cls.radius
def main():
Pizza.get_radius()
if __name__ == '__main__':
main()
Re: Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 14:11
von Sirius3
@MarcNAV: an Deinem Beispiel ist noch vieles falsch. Bevor Du mit Klassen-Attributen und -Methoden solltest Du die normalen Methoden und Attribute gut beherrschen.
Sollte get_radius eine Klassen-Methode sein, fehlt der Decorator @classmethod. Diese Methode hat einen Rückgabewert, den Du z.B. mit print ausgeben könntest. Die Methode ist aber völlig überflüssig, weil man auch direkt mit Pizze.radius auf dieses Attribut zugreifen könnte.
Re: Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 14:47
von BlackJack
Ergänzend: Veränderliche Attribute machen auf Klassen *sehr* selten Sinn, meistens werden dort Konstanten abgelegt die für alle Exemplare gelten, und Konstanten werden per Konvention komplett in Grossbuchstaben geschrieben.
Nächste Frage ist dann warum der Radius einer Pizza konstant für alle Pizzen gleich sein sollte‽
Re: Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 15:02
von MarcNAV
Danke für die raschen Antworten. Ja das Beispiel ist vielleicht nicht das Beste. Hab hier mal selbst eins gebastelt was meiner Problemstellung viel näher kommt. Was muss ich daran abändern damit ich die Rendite printen lassen kann? Python ist meine erste Programmiersprache und Klassen konnte ich bisher immer vermeiden;)
Code: Alles auswählen
#Rendite von Restaurant berechnen
class Restaurant:
def __init__(self, Einnahmen, Ausgaben):
self.e = Einnahmen
self.a = Ausgaben
def Berechnung(self, r):
r = Einnahmen - Ausgaben
return r
def main():
R = Restaurant(5000, 2000)
print R.e, '-', R.a, '=', R.r
if __name__ == "__main__":
main()
Re: Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 15:08
von MagBen
So macht das Pizza-Beispiel Sinn:
Code: Alles auswählen
class Pizza(object):
def __init__(self, radius):
self.radius = radius
def get_radius(self):
return self.radius
klein = Pizza(10)
mittel = Pizza(15)
gigantisch = Pizza(42)
print( klein.get_radius() )
print( mittel.get_radius() )
print( gigantisch.get_radius() )
Re: Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 15:15
von BlackJack
@MarcNAV: Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
class Restaurant(object):
def __init__(self, einnahmen, ausgaben):
self.einnahmen = einnahmen
self.ausgaben = ausgaben
@property
def rendite(self):
return self.einnahmen - self.ausgaben
def main():
restaurant = Restaurant(5000, 2000)
print('{0.einnahmen} - {0.ausgaben} = {0.rendite}'.format(restaurant))
if __name__ == "__main__":
main()
@MagBen: Wobei die `get`-Methode in Python eher unnötig ist.
Re: Klasse Attribut ausgeben
Verfasst: Mittwoch 1. April 2015, 15:16
von MagBen
Code: Alles auswählen
class Restaurant:
def __init__(self, einnahmen, ausgaben):
self.einnahmen = einnahmen
self.ausgaben = ausgaben
def rendite(self):
return self.einnahmen - self.ausgaben
def __str__(self):
return "%.2f - %.2f = %.2f" % (self.einnahmen, self.ausgaben, self.rendite())
restaurant = Restaurant(5000, 2000)
print restaurant
Variablen und Methoden werden in der Regel klein geschrieben und Klassen groß.
Die Methode __str__ wird aufgerufen, wenn das Objekt in eine Stringdarstellung umgewandelt werden soll.
Re: Klasse Attribut ausgeben
Verfasst: Donnerstag 2. April 2015, 11:12
von MarcNAV
Vielen Dank euch. Hilft mir auf jeden Fall weiter
