python - 修改不同的对象而不检查标志

标签 python oop static-methods

我想修改不同的对象。目前我传递了一个 flags 参数来决定是否执行更改。有没有一种方法可以在不传递任何标志的情况下完成这项工作,或者这是最好的方法?一旦我拥有更多对象实例,我就不觉得这是一个可扩展的解决方案。

def modifyfunc(self, flags, id_to_modify, value):
  if flags['object1']:
    self.object1.modify(id_to_modify, value)
  if flags['object2']:
    self.object2.modify(id_to_modify, value)
  if flags['object3']:
    self.object3.modify(id_to_modify, value)

请注意,任何 objectx 的标志都可以为 true。假设任何 objectx 正确实现了 modify 方法(基本上,对象实例是从同一基类继承的不同类型,因此它们都具有 modify 方法,但可能这些对象之间的实现方式不同)。

最佳答案

使用getattr ,您可以访问对象的任意实例成员:

getattr(obj, instance_attribute_name)

示例:

>>> 'a'.upper()
'A'
>>> getattr('a', 'upper')()
'A'
<小时/>

除了标志之外,传递要修改的属性名称怎么样?

def modifyfunc(self, attr_names, id_to_modify, value):
    for attr_name in attr_names:
        getattr(self, attr_name).modify(id_to_modify, value)

...

obj.modifyfunc(['object1', 'object3'], 'id1', 'value1')

关于python - 修改不同的对象而不检查标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177073/

相关文章:

java - Java 中的静态方法和接口(interface)

python - Django - 即使链接有效,测试也会失败

python - 在 Python 中获取字符串中特殊字符后的第一个单词

php - 对所有 Controller 使用单个 crud 模型,而不是对每个 Controller 使用单独的模型

javascript - 原型(prototype)继承设置

java - 为什么Java不允许覆盖静态方法?

C++ 静态友元方法示例(需要说明)

python - 如何激活特定的 Python 环境作为我提交给 Slurm 的一部分?

python - 使用 ListView 计算对象

c++ - 具有多次调用的可替换方法的类