2016-07-30 14 views
0

machen Lets sagen, dass ich ein Klassenobjekt someClassObject in Funktion A erstellt und warf das Objekt in eine Funktion B:Python, wie über Funktionen Klassenobjekt geteilt

functionB(someClassObject) 

Wie kann ich alle Änderungen behalten Ich habe in Funktion B zu someClassObject gemacht, so kann ich weiterhin einClassObject in Funktion A verwenden, wenn meine Funktion B nichts zurückgeben kann?

Meine Funktion B ist eine rekursive Funktion und ich kann sowieso nicht, dass es meine someClassObject

+3

Was haben Sie versucht? (Objekte * werden * standardmäßig als Referenzen übergeben. Alle Änderungen, die Sie in 'B' * vornehmen, sollten für' A' sichtbar sein. [Siehe hier] (https://docs.python.org/3/faq/programming .html # how-do-ich-schreibe-eine-funktion-mit-ausgabe-parameter-call-by-reference).) – Phillip

Antwort

0
zurückkehren

Ich bin ziemlich sicher, dass standardmäßig passiert, wenn Sie eine Klasse erstellen:

Type "help", "copyright", "credits" or "license" for more information. 
>>> class A: 
... def __init__(self, x): 
...  self.x = x 
... 
>>> def modA(objA): 
... objA.x = 9 
... 
>>> def createA(): 
... a = A(2) 
... print(a.x) 
... modA(a) 
... print(a.x) 
... 
>>> createA 
<function createA at 0x7ff7acee2a60> 
>>> createA() 
2 
9 
0

Wenn Sie ein Klassenobjekt (normalerweise ein beliebiges Objekt) übergeben, bleibt es ein einzelnes Objekt, so dass alle Änderungen für alle Referenzen auf es sichtbar sind.

zum Beispiel in

def B(cls): 
    cls.value=2 

def A(): 
    class C(object): 
     value=1 
    B(C) 
    return C.value 

A() 2

0

kehrt Ich nehme an, Sie bedeuten Instanz einer Klasse, wenn Sie Objektklasse gemeint, in Python sogar eine Klasse ist ein Objekt und Sie können sie passieren wie Instanzen. In Python werden alle Objekte als Referenz übergeben. Wenn Sie eine Instanz an eine Funktion übergeben, übergeben Sie nur eine Referenz, und alle Änderungen, die Sie am Objekt vornehmen, bleiben erhalten.

Wenn Sie Instanz einer Klasse als Beispiel gemeint ist:

class Foo(): 

    def __init__(self): 
     self.x = 1 

def functionB(foo): 

    foo.x += 1 
    if foo.x < 10: 
     functionB(foo) 



def functionA(): 
    some_instance_of_Foo = Foo() 

    functionB(some_instance_of_Foo) 

    print(some_instance_of_Foo.x) 

if __name__ == "__main__": 
    functionA() # 10