2017-06-10 97 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

我用它来简化这个想法。 –