使用外部函数更新内部python类参数

2024-09-19 20:59:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个外部函数my_update_function,它不是我的类my_class的一部分(目前出于设计原因)。现在,我想使用外部函数my_update_function更新my_class的内部参数,即self.xself.y

请看这个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.xself.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将更新的参数值传递给类,而不必显式地将它们存储为输出

请让我知道,如果它不清楚我的意思,我会更新的问题


Tags: 函数self参数mydefupdate原因function
2条回答
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)

由于python没有指针,一个常见的技巧是使用列表,列表是通过引用传递的,因此它们的内容是可变的:

>>> 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对象

相关问题 更多 >