Python如何使各个函数共享类对象

时间:2016-07-30 17:05:15

标签: python oop

假设我在函数A中创建了一个类对象someClassObject,并将该对象抛出到函数B中:

functionB(someClassObject)

如何保留我在函数B中对someClassObject所做的所有修改,这样如果我的函数B不能返回任何东西,我可以继续在函数A中使用someClassObject?

我的函数B是一个递归函数,我无法想到让它返回我的someClassObject

3 个答案:

答案 0 :(得分:0)

我非常确定在创建课程时默认情况下会发生这种情况:

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

答案 1 :(得分:0)

如果您传递一个类对象(通常是任何对象),它会保留一个对象,因此对它的所有引用都可以看到对它的所有更改。

例如在

def B(cls):
    cls.value=2

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

A()返回2

答案 2 :(得分:0)

我认为你的意思是一个类的实例,当你意味着类对象时,在Python中,即使一个类是一个对象,你也可以像实例一样传递它们。 在Python中,所有对象都通过引用传递,这意味着当您将实例传递给函数时,您只传递引用,并且将保留对该对象所做的所有更改。

如果你的意思是一个类的实例而不是例子:

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