有没有一种方法可以将函数作为属性调用(`foo.function()---`foo.attribute`)?

时间:2018-12-27 19:16:16

标签: python

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

我正在尝试修改mouseNumber指定的属性,其中cage[cageNumber]返回一个类对象。例如:我正在寻找笼101中的鼠标3 cage[101].m3。每只鼠标的编号前都有一个“ m”,这就是问题的出处。我想将cage[101].m3 = True更改为cage[101].m3 = False。我会这样调用函数:
sacrifice(101, 3)

我尝试过:

def sacrifice(cageNumber, mouseNumber):
    cage[cageNumber].exec(f'm{mouseNumber}') = False

给予SyntaxError: can't assign to function call

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)。每个笼子中每个数字可能只有1个,但是如果有开口,它们可能会在笼子之间移动。我的目标是通过在老鼠周围移动来减少笼子的数量。

编辑:笼子包含在字典中

1 个答案:

答案 0 :(得分:1)

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"))

相关问题