Python 创建包含lambda函数的字典以访问类的属性

Python 创建包含lambda函数的字典以访问类的属性,python,python-3.x,Python,Python 3.x,我有两个类,分别是Person和Model(如下),我需要创建一个字典(self.reporter),其中包含Person类的属性,如下所示key:attribute name,value:lambda函数返回该对象的属性。 目前,我的代码是这样工作的(如下)。问题是,如果我有100个属性要输入字典(self.reporter),我就必须手工输入。如何自动创建此词典 编辑:为什么我需要以这种方式设计词典? 因为我想将它与需要这种结构的mesa软件包一起使用 随机导入 类Person(): 定义初

我有两个类,分别是Person和Model(如下),我需要创建一个字典(self.reporter),其中包含Person类的属性,如下所示
key:attribute name
value:lambda函数返回该对象的属性
。 目前,我的代码是这样工作的(如下)。问题是,如果我有100个属性要输入字典(self.reporter),我就必须手工输入。如何自动创建此词典

编辑:为什么我需要以这种方式设计词典? 因为我想将它与需要这种结构的mesa软件包一起使用

随机导入
类Person():
定义初始化(自):
self.age=random.randint(1,99)
self.gender=random.choice([“男”、“女”])
self.fear\u of\u恐怖电影=随机选择([对,错])
类模型():
定义初始化(自):
self.population=list()
对于范围(10)内的i:
person=person()
self.population.append(个人)
self.reporter={“年龄”:lambda x:x.age,
“性别”:lambda x:x.gender,
“恐怖电影中的恐惧”:lambda x:x。恐怖电影中的恐惧
}
模型=模型()
打印(model.reporter)

我不能加入评论中的讨论,但如果这确实是您需要做的事情,我建议将
getattr
dict
结合使用:

def get_reporter(person):
    return {key: lambda x: getattr(x, key) for key in person.__dict__.keys()}
这里唯一需要注意的是,您需要一个已经实例化的
Person
对象,以便为该对象创建
reporter
。不幸的是,我不确定是否有办法解决这个问题,因为Python动态地创建实例变量,所以您只能知道在创建字典时存在的实例变量。您可以使用一个隐藏的虚拟
Person
对象,它的所有属性都只有
None
,然后您可以使用它来创建报告者


还应该注意的是,它只包含可写实例属性。

首先为什么需要它?这看起来像是旁注上的反模式-如果您只关注一个结果,那么在这里使用
random.choices([“男”、“女”])[0]
似乎很奇怪。。。我可以做随机选择(['male','meal']),而不是…@Francesco,但我想说的是随机选择。选择(no s)对于单个项目来说要好得多。。。这相当于你的
随机选择(…)[0]
…我也对你在这里想要实现的目标感到困惑。。。例如,您实际如何使用
reporter
。。。如果您能提供一个如前所述的用例,这会有所帮助,这看起来确实有点困难antipattern@JonClements太好了,谢谢,我没注意到!我需要这个结构,因为我想将它与mesa库的DataCollector模块一起使用。