gpt4 book ai didi

python - 如何在不调用函数的情况下获取函数的属性

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:27 24 4
gpt4 key购买 nike

假设我有这样一个函数

def spam():
spam.eggs = "Foobar"
#do stuff
return

我想在另一个函数中获取 spam.eggs ("Foobar") 的值,而不必实际调用 spam() 方法,例如,

def main():
print spam.eggs

我希望它返回 Foobar。但是,很明显,这是行不通的,因为我还没有调用 spam(),所以我从未分配过 spam.eggs 属性,所以我必须这样做

def main():
spam()
print spam.eggs

但是,如果我想要eggs属性,我不想调用spam()函数,事实上,我想检查是否是spam () 具有 eggs 属性,如果在调用它之前等于 "Foobar",例如

def main():
if hasattr(spam,'eggs'):
if getattr(spam, 'eggs') == "Foobar":
spam()

但是和以前一样,因为我还没有调用 spam,所以我还没有分配 spam.eggs

有什么办法可以做到这一点,也许是用装饰器?我想让赋值在某种程度上接近函数,所以我更喜欢一些不像的东西

def func():
setattr(spam, 'eggs', 'Foobar')

除非在装饰器中,否则我必须在另一种方法中执行 setattr()

最佳答案

可以用装饰器来完成,是的:

def addEggs(func):
func.eggs = "foobar"
return func

@addEggs
def spam():
pass

>>> spam.eggs
'foobar'

如果您希望能够以参数化的方式指定属性名称和/或值,则必须编写更复杂的装饰器:

def addAttr(attr, value):
def deco(func):
setattr(func, attr, value)
return func
return deco

@addAttr('attrName', 'value')
def spam():
pass

>>> spam.attrName
'value'

但是,仍然存在您为什么要这样做的问题。如果函数属性真的有用,那通常是因为有一个自然的地方可以设置它们——也就是说,其他东西可以为它自己的目的设置函数的属性。如果您只是在定义函数时正确设置属性——也就是说,如果属性是函数本身的固有部分——看起来您可能想要更像带有方法的类。

关于python - 如何在不调用函数的情况下获取函数的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com