2017-11-10 11 views
0

Ich habe viele Beiträge gesehen, die zeigen, wie man auf einen konstanten Wert durch Vererbung zugreifen kann. das ist nicht mein Fall.
Ich möchte zwei Instanzen aus zwei verschiedenen Modulen erstellen und Informationen/Variablen zwischen ihnen austauschen.
zwei Fragen:
1. die Klassen „weiß nicht“ einander, weil sie auf verschiedene Dateien sind „Import“, um sie als Module ing in diesem Fall
2. Wie kann „print_class“ Instanz kann nicht viel helfen Zugriff & Werte der Variablen in "cal_class" -Instanz ändern?Python - Wie man Variablen zwischen zwei verschiedenen Instanzen teilt

Bitte beachten Sie, ich bin auf der Suche nach einer Möglichkeit, den Wert von einer Instanz auf eine andere zuzugreifen. (In meinem Fall ist es zuzuteilen Informationen (Excel-Tabellen) zwischen Instanzen passieren, Gabe von Parametern durch die „main“ Funktion nicht praktikabel ist)

Hier ist mein simplify Problem:

cal_class_file.py

class cal_class: 
    def add(self,first,second) 
     self.result= first + second 

print_class_file.py

class print_class: 
    def print_sum(self): 
     result_from_cal_class = ?? <=-# How to get the value from local_calculate.result? 
     print(result_from_cal_class) 

main.py

import cal_class_file 
import print_class_file 

def main(): 
    local_calculate = cal_class_file.cal_class() # create instance 
    local_print = print_class_file.print_class(); # create instance that reads values from "local_calculate" instance 

    local_calculate.add(5,6) # calculate addition 
    local_print.print_sum() # output: 11 

    local_calculate.add(4,5) # update values in "local_calculate" instance 
    local_print.print_sum() # output: 9 

Wie kann ich den aktuellen (Latest) Wert für "result_from_cal_class" erhalten?

Antwort

2

in den Wert Pass haben Sie es direkt in Ihrem Client-Code.

class print_class: 
    def print_sum(self, result_from_cal_class): 
     print(result_from_cal_class) 

def main(): 
    local_calculate = cal_class_file.cal_class() # create instance 
    local_print = print_class_file.print_class(); # create instance that reads values from "local_calculate" instance 

    local_calculate.add(5, 6) # calculate addition 
    local_print.print_sum(local_calculate.result) # output: 11 

    local_calculate.add(4, 5) # update values in "local_calculate" instance 
    local_print.print_sum(local_calculate.result) # output: 9 

Ausgang:

11 
9 

jedoch bedeuten, wenn Sie, dass Ihr Kunde dies tut:

def main(): 
    # setup elided ... 

    # actually call to add is done in another function 
    local_calculate.add(5, 6) # calculate addition 

    # actually call to print_sum is done somewhere else: 
    local_print.print_sum() # output: 11 

Sie könnten print_class wie folgt definieren:

class print_class: 
    def __init__(self, calculator): 
     self.calculator = calculator 
    def print_sum(self): 
     print(self.calculator.result) 

Dann es wie folgt initialisieren:

def main(): 
    local_calculate = cal_class_file.cal_class() # create instance 
    local_print = print_class_file.print_class(local_calculate); # create instance that reads values from "local_calculate" instance 

vorsichtig sein, da dies ein wenig ist es, eine globale Variable wie mit: calculate etwas tut, um ein Ergebnis zu verlassen, nimmt Druck das letzte Ergebnis auf.

Wenn Sie einen unerwarteten Aufruf haben, um zwischen dem gewünschten Ausdruck und dem Ausdruck zu berechnen, erhalten Sie unerwartete Ergebnisse.

+0

Danke, die erste Lösung ist nur für dieses Beispiel gut, aber es ist nicht praktisch für mein aktuelles Projekt, Parameter/Werte durch die Hauptfunktion zu übergeben, weil ich allot von zu verarbeitenden Daten (> 200mb von Tabellen) habe Tisch ist etwas anders. Außerdem gibt es mehr Instanzen und Klassen. Solche Werte zwischen mehreren Instanzen zu übergeben, wird es sehr schwer machen, die Analyse von Tabellen zu automatisieren. Ich muss versuchen, Ihre zweite Lösung anzuwenden, um zu sehen, ob sie für mich praktisch ist. – orenk

+0

Funktioniert wie ein Charme. Danke Quamrana – orenk

Verwandte Themen