aus einer Klasse auf eine andere Klasse zugreifen

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
Ekua
User
Beiträge: 10
Registriert: Freitag 26. Juni 2020, 09:53

Hallo,

ich bin noch relativ unerfahren im Programmieren und hoffe ich drücke mich korrekt aus.
Ich programmiere objektorientiert und möchte aus einer Klasse auf die Klassenvariablen einer anderen Klasse zugreifen.
In einem Modul sind bei mir alle Klassen und in einem anderen werden die Objekte initialisiert und mit ihnen gerechnet. Ich brauche jedoch einige der Variablen nicht nur in einer Klasse und frage mich wie ich das lösen kann.

Hier ein Beispiel:
class Expander:
def __init__(self, T_in, p_in, T_Ue, medium):
self.T_in = T_in
self.p_in = p_in
self.T_Ue = T_Ue
self.medium = medium

class Heatsource:
def __init__(self, T_in, p_in, medium):
self.Ts_in = T_in
self.ps_in = p_in
self.HS_medium = medium

def T_out(self):
T_out = self.Ts_in + Expander.T_in
return(T_out)

Für 'EXpander.T_in' suche ich den richtigen Ausdruck.

Vielen Dank für eure Hilfe!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Abhängigkeiten bekommen Klassen am besten als Argument im Konstruktor. Dann kannst du auf den konkreten expander mit self._der_super_expander zugreifen.
Sirius3
User
Beiträge: 17831
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine Abkürzungen. Wenn Du temperature_in meinst, schreib das auch, oder pressure_in, oder temperature_???
Was soll das s dann in Ts_in, oder ps_in?
Solche kryptischen Abkürzungen machen den Code einfach nur schwierig lesbar.
Funktionsnamen sollten Tätigkeiten beschreiben und werden komplett klein geschrieben: calculate_temperature_out.
`return` ist keine Funktion, die Klammern gehören also weg.

Ich hoffe Du hast keine (und Du hast auch wirklich keine) Klassenvariablen. Du hast Instanzattribute, und um auf Instanzattribute zuzugreifen, brauchst Du auch eine Instanz von Expander und die muß auch als Argument an calculate_temperature_out übergeben werden.

Code: Alles auswählen

    def calculate_temperature_out(self, expander):
        return self.temperature_s???_in + expander.temperature_in
Ekua
User
Beiträge: 10
Registriert: Freitag 26. Juni 2020, 09:53

Danke für eure schnellen Antworten. Die Anmerkungen zur Schreibweise werde ich umsetzen und meine Frage hat sich auch beantwortet.
Antworten