首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法将函数调用为属性(`foo.function()` -> `foo.attribute`)?

是否有方法将函数调用为属性(`foo.function()` -> `foo.attribute`)?
EN

Stack Overflow用户
提问于 2018-12-27 19:16:16
回答 1查看 42关注 0票数 0

我正在编写一个函数来查找对象的特定属性,并将该属性设置为另一个值。是否有一种方法可以使用函数来指定要影响的属性?

我试图修改mouseNumber指定的属性,其中cage[cageNumber]返回一个类对象。例如:我正在寻找鼠3在笼101号,cage[101].m3。每个鼠标在其编号之前都有一个"m“,这就是问题的来源。我想把cage[101].m3 = True改成cage[101].m3 = False。我会这样称呼这个函数:

sacrifice(101, 3)

我试过:

代码语言:javascript
复制
def sacrifice(cageNumber, mouseNumber):
    cage[cageNumber].exec(f'm{mouseNumber}') = False

给予SyntaxError: can't assign to function call

代码语言:javascript
复制
def sacrifice(cageNumber, mouseNumber):
    mouseNumber = exec(f'm{mouseNumber}')
    cage[cageNumber].mouseNumber = False

给予NameError: name 'm3' is not defined

背景:我正在编写一段代码,以跟踪并巩固笼子中的老鼠。每个笼是一个类实例,每个鼠标是每个笼的属性。每个笼子容纳5只小鼠(m1,m2,m3,m3,m5)。每个笼子里可能只有一个,但如果有开口,它们可能会在一个笼子里来回移动。我的目标是通过移动老鼠来减少笼子的数量。

编辑:笼子包含在字典中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-27 19:22:28

代码语言:javascript
复制
def sacrifice(cageNumber, mouseNumber):
    setattr(cage[cageNumber],"m{}".format(str(mouseNumber)), False)

setattr允许您基于字符串名称访问对象。因此,例如,my_object.my_attritue = 3也可以编写为setattr(my_object, "my_attribute", 3)

您可以以类似的方式使用getattr来获取值。也就是说,print(my_object.my_attribute)可以写成print(getattr(my_object, "my_attribute"))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53949806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档