Skip to main content
 首页 » 编程设计

python之如何更改python中函数对象的属性

2025年05月04日16xing901022

在下面的代码中,我定义了一个具有变量 y 的函数 f。 我试图在函数外调用 f.y,但它抛出了错误。 但它允许我分配 f.y=11 甚至新属性 f.x=12。但调用 f() 不会更新 y。那么这个 f.y 或 f.x 附加到哪里。是否可以更改函数内的 y。

>>> def f(): 
...   y = 10 
...   print y 
...  
>>> f.y 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
AttributeError: 'function' object has no attribute 'y' 
>>> f.y = 11 
>>> f() 
10 

编辑:这也无济于事

    >>> def f(): 
...   f.y = 10 
...   print f.y 
...  
>>> f() 
10 
>>> f.y=11 
>>> f() 
10 
>> 

请您参考如下方法:

如果您能解释一下您要完成的目标,也许会更好。首先直接回答您的问题:

f 指的是您创建的 function 对象。您可以将属性分配给任何具有 __dict__ 属性的对象(即您使用 f.y=11 所做的事情)。继续检查 dir(f),您会看到它有一个 __dict__。它本质上是围绕普通 dict 的语法包装器,您通常可以通过执行类似

的操作来访问它
my_dict['y'] = 10 

请注意,此 dict 与您在函数中定义的任何局部变量无关。通常,您根本不想这样做,而是在需要 dict 时支持显式 dict。当您确实想要使用此语法访问对象的 __dict__: 类时的情况。我在下面简要介绍了这一点。


现在,由于我认为您正在尝试重新发明轮子,所以我将尝试复习一下您可能应该 做的事情。由于我不知道您要做什么,所以我将使用散弹枪方法并尽可能多地涵盖我能想到的内容。

- 将其作为函数的参数,或者更好的是,将其作为 默认参数 提供给 f,您可以选择更改它。

def f(y=10): 
    print y 
 
f() 
#prints 10 
 
f(y=11) 
#prints 11 

-从 f 返回你的值。这当然可以让您访问变量。基本的东西,但是..

def f(y=10): 
    return y 
 
f() 
Out[9]: 10 
 
f(y=11) 
Out[10]: 11 

-使f成为类。这使您可以获取 f 的实例,并按照您认为合适的方式对其进行操作。

class F: 
    def __init__(self,y=10): 
        self.y = y 
 
f1 = F() 
 
f2 = F(y=11) 
 
f1.y, f2.y 
Out[17]: (10, 11) 

-最后,全局变量。不要使用全局变量。