Klasse Attribut ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

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()
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
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‽
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

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()
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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() )
a fool with a tool is still a fool, www.magben.de, YouTube
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.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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.
a fool with a tool is still a fool, www.magben.de, YouTube
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

Vielen Dank euch. Hilft mir auf jeden Fall weiter :wink:
Antworten