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 
