python-3.x - 检查字符串是否是对象变量的一部分
问题描述
我想将字符串传递给解析要修改的正确属性的方法/类函数。我很确定我以前做过这个,但我似乎忘记了如何做。
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 对象有一个名为的内置方法__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)
.
推荐阅读
- powershell - Powershell get-adcomputer - 过滤选项对象值
- rest - 启动 HTTP 服务器时如何使用 maven 编译器插件传递参数?
- kibana - 用户管理权限错误
- javascript - d3 将元素重置为其原始颜色
- python - 获取系统文件类型名称python
- r - CRAN 提交 - R CMD 检查警告 - 使用的编译标志
- scala - Scala:如何按时间戳将 Iterable[T] 分组为 Iterable [T]
- ruby-on-rails - 如何在连接表值上使用查找器方法?
- php - 如何在 laravel 中使用 symfony/dom-crawler 从 HTML 块中选择多个值
- c - LC3/LC4 硬件系统中的有符号与无符号比较