在下面的代码段,参数传递通过引用
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中的引用传递。我怎样才能解决这个问题并修改对象而不返回它的新值呢?
事情不像在Python中的原始类型那样工作。你可以从'insert'函数返回'x'。 –
如果你真的想在插入中改变参数,传入一个单项列表:'def insert(x):if x [0] == None:x [0] = Test(10); obj = [None]; insert(obj); print(obj [0] .val)' – DyZ
@AhsanulHaque请你详细说明一下吗?我在想,我传递的是一个对象的引用,并且该引用被分配了一个对测试对象的引用。那么为什么原始对象中没有反映这种变化? – banad