【发布时间】:2009-07-31 13:06:47
【问题描述】:
使用 Python 我想在一个类中创建一个属性,但它的名称在一个字符串中。通常你会这样做:
blah = property(get_blah, set_blah, del_blah, "bleh blih")
其中 get_、set_ 和 del_blah 已相应定义。我尝试对变量中的属性名称执行相同的操作,如下所示:
setattr(self, "blah", property(self.get_blah, self.set_blah, self.del_blah, "bleh blih"))
但这不起作用。第一种情况 blah 返回属性的值,在第二种情况下,它返回一个属性,即<property object at 0xbb1aa0>。我应该如何定义它才能发挥作用?
【问题讨论】:
-
通常,我们用一个固定的、明显的、不变的名称来定义属性。然后我们使用 getattr 来灵活地引用属性。你想用这个来完成什么?更大的图景是什么?可能有一种更简单的方法;请提供背景信息,以便我们提出实际可行的建议。
-
我正在创建一个类来保存进程的配置,它将有大量的属性,在设置、获取、验证、记录等方面都非常相似。我正在尝试删除代码重复。
-
@J. Pablo Fernández:请更新您的问题。 cmets 不是放置重要信息的地方。听起来您只是在谈论一个包装属性值字典的类。但是您需要提供一些有关您的用例的详细信息。不仅仅是你可以塞进评论。这是你的问题;请更新它。
标签: python properties setattr