首页 > 解决方案 > 检查字符串是否是对象变量的一部分

问题描述

我想将字符串传递给解析要修改的正确属性的方法/类函数。我很确定我以前做过这个,但我似乎忘记了如何做。

class A:
    def __init__(self):
        self.word = B.getWord()
        self.phrase = "Some default string"

    def set_dynamically(self, attribute, value):
        self[attribute] = value

这会让我做类似的事情A.set_dynamically('word', C.getWord())

我已经尝试为此寻找一个问题和答案,但我很难定义它被称为什么,所以我并没有真正找到任何东西。

标签: python-3.xobject

解决方案


Python 对象有一个名为的内置方法__setattr__(self, name, value)来执行此操作。setattr()您可以通过使用对象作为参数调用此方法:

A = A()
setattr(A, 'word', C.getWord())

当你可以做类似的事情时,没有理由这样做A.word = C.getWord()(事实上,这可以解决__setattr__()与内置setattr()函数相同的调用方式),但如果你设置的属性是动态命名的,那么这是你如何绕过这个限制。

如果您想自定义类在您尝试调用setattr()它时(或尝试正常设置属性时)的行为,您可以__setattr__(self, name, value)像重写__init__(). 这样做时要小心,因为很容易意外产生无限递归错误 - 为避免这种情况,您可以object.__setattr__(self, name_value)在覆盖的__setattr__(self, name, value).


推荐阅读