簡體   English   中英

Python如何使類對象跨函數共享

[英]Python how to make class object shared across functions

可以說我在函數A中創建了一個類對象someClassObject,並將該對象放入函數B中:

functionB(someClassObject)

如何保留在函數B中對someClassObject所做的所有修改,以便在函數B無法返回任何內容的情況下繼續在函數A中使用someClassObject?

我的函數B是一個遞歸函數,無論如何我都想不起來讓它返回我的someClassObject

我很確定在創建類時默認會發生這種情況:

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

如果傳遞一個類對象(通常是任何對象),則該對象將保留一個對象,因此對該對象的所有引用都可以看到其所有更改。

例如在

def B(cls):
    cls.value=2

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

A()返回2

我假設您是指類的實例,而您是指類對象,在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM