我有一个外部函数my_update_function
不我的班级my_class
的一部分(目前出于设计原因)。现在,我想使用外部函数my_class
更新self.x
的内部参数,即self.y
和my_update_function
。
请参阅此MWE,其中描述了我的问题:
def my_update_function(arg1,args2):
"""
Updates arg1 and arg2.
"""
return arg1*arg1,arg2*arg2
class my_class(object):
def __init__(self):
self.x = 2
self.y = 3
def simulate(self):
my_update_function(self.x,self.y)
但是,我想知道是否有某种方式(通过课程重新设计或其他方式)我可以更新self.x
和self.y
,而无需保存函数my_update_function
的输出作为参数值(并且不必包含my_update_function
作为我的类my_class
的一部分),即我不想写这个:
def simulate(self):
self.x, self.y = my_update_function(self.x,self.y)
但希望它是这样的:
def simulate(self):
my_update_function(self.x,self.y)
以便my_update_function
将更新的参数值传递给类,而不必将它们显式存储为输出。
如果不清楚我的意思,请告诉我,我会更新问题。
答案 0 :(得分:1)
def my_update_function(obj):
obj.x, obj.y = obj.x * obj.x, obj.y * obj.y
然后在你班上:
class my_class(object):
def __init__(self):
self.x = 2
self.y = 3
def simulate(self):
my_update_function(self)
答案 1 :(得分:1)
由于python没有指针,一个常见的技巧是使用通过引用传递的列表,因此它们的内容是 mutable :
>>> def my_update_function(l):
... l[0], l[1] = l[0] * l[0], l[1] * l[1]
...
>>> l = [2, 3]
>>> my_update_function(l)
>>> l
[4, 9]
我将此作为第二个答案添加,以免造成混淆。
使用对象而不是列表以相同的方式工作(两者都通过引用传递),并且您已经有了一个对象,因此最好使用my_class
对象。