Python 3.x 检查字符串是否是对象变量的一部分
我想将一个字符串传递给一个方法/类函数,该函数解析要修改的正确属性。我很确定我以前做过,但我好像忘了怎么做Python 3.x 检查字符串是否是对象变量的一部分,python-3.x,object,Python 3.x,Object,我想将一个字符串传递给一个方法/类函数,该函数解析要修改的正确属性。我很确定我以前做过,但我好像忘了怎么做 class A: def __init__(self): self.word = B.getWord() self.phrase = "Some default string" def set_dynamically(self, attribute, value): self[attribute] = value 这将允许
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\u动态('word',C.getWord())
我已经尝试过为此搜索一个问题和答案,但我很难定义它的名称,所以我没有真正找到任何东西。Python对象有一个名为
\uuuuu setattr\uuuuu(self,name,value)
的内置方法来完成此任务。可以使用对象作为参数调用setattr()
来调用此方法:
A = A()
setattr(A, 'word', C.getWord())
如果您只需执行类似于A.word=C.getWord()
(实际上,这可以归结为调用\uuuu setattr()
,方法与内置的setattr()
函数相同),那么没有理由这样做,但是如果您正在设置的属性是动态命名的,这就是你如何绕过这个限制
如果您想自定义当您尝试调用类上的
setattr()
时(或当您尝试正常设置属性时)类的行为,您可以使用与重写\uuuuu init\uu()
相同的方式重写\uuuuuuu setattr\uuuuuuuuuuu(self、name、value)
方法。如果您这样做,请小心,因为它很容易意外地产生无限递归错误-为了避免这种情况,您可以使用对象。
setattr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself,name\u value)在被重写的\uuuuuuuuuuuuuuuuuuuuuuuu。我创建了一个映射对象
def _mapper(self, attr, object):
m = { "funcA" : object.funcA,
"funcB" : object.funcB,
... : ...,
}
return m.get(attr)
def call_specific_func_(self, attr):
--do stuff--
for a in some-list:
attr = a.get_attr()
retvals = self._mapper(attr, a)
-- etc --
这就是我想要的。我接受了你的回答。