如何在 Python 中动态访问类属性?

新手上路,请多包涵

假设我创建了一个类的实例并想为其公共属性分配一些值。通常,这会像这样完成:

 class MyClass:
    def __init__(self):
        self.name = None
        self.text = None

myclass = MyClass()
myclass.name = 'My name'

但是,如果编写一个将类作为参数的函数,并且我想动态地为该类的公共属性分配一些值 - 即通过变量和循环(不知道有多少或它们被称为什么。 )

显而易见的是:

 myclass = MyClass()
myclass['name'] = "My name"

但这是行不通的。

有任何想法吗?

原文由 Honza Pokorny 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 446
2 个回答
setattr(my_class_instance, 'attr_name', attr_value)

原文由 shylent 发布,翻译遵循 CC BY-SA 2.5 许可协议

在阅读被拒绝 的动态属性访问语法 后,我使用了一个混合类,提供对对象属性的字典式访问:

 class MyClass:
    def __init__(self):
        self.name = None
        self.text = None
    def __getitem__(self, name):
        return getattr(self, name)
    def __setitem__(self, name, value):
        return setattr(self, name, value)
    def __delitem__(self, name):
        return delattr(self, name)
    def __contains__(self, name):
        return hasattr(self, name)

虽然仍然能够直接设置属性:

 myclass = MyClass()
myclass.name = "foo"
myclass.text = "bar"

然后可以动态设置它们:

 for attr in ('name', 'text'):
    myclass[attr] = confirm(attr, default=myclass[attr])

原文由 r2rien 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题