2017-06-10 193 views
0

在下面的代碼段,參數傳遞通過引用

class Test: 
    def __init__(self, val): 
     self.val = val 


def insert(x): 
    if x == None: 
     x = Test(10) 

obj = None 
insert(obj) 
print(obj.val) 

我期待print語句的輸出爲10,但我得到AttributeError: 'NoneType' object has no attribute 'val'。這是因爲obj沒有被函數修改,並且在調用插入函數之後仍然是。據我所知,所有對象都通過python中的引用傳遞。我怎樣才能解決這個問題並修改對象而不返回它的新值呢?

+3

事情不像在Python中的原始類型那樣工作。你可以從'insert'函數返回'x'。 –

+1

如果你真的想在插入中改變參數,傳入一個單項列表:'def insert(x):if x [0] == None:x [0] = Test(10); obj = [None]; insert(obj); print(obj [0] .val)' – DyZ

+0

@AhsanulHaque請你詳細說明一下嗎?我在想,我傳遞的是一個對象的引用,並且該引用被分配了一個對測試對象的引用。那麼爲什麼原始對象中沒有反映這種變化? – banad

回答

1

首先,您必須從函數insert中返回變量。

其次,您必須將行插入(obj)分配給變量。

Val仍在Test類中。 你必須從課堂內部打印出來。 也,obj.val不存在。

class Test: 
    def __init__(self, val): 
     self.val = val 
     print(val) 



def insert(x): 
    if x == None: 
     x = Test(10) 
    return(x) 

obj = None 
Var_Ref=insert(obj) 
print(Var_Ref) 
+0

您混淆了全局變量和靜態變量。 – DyZ

+0

我用它來簡化這個想法。 –