【问题标题】:Modify different objects without checking flags修改不同的对象而不检查标志
【发布时间】:2016-07-04 04:41:35
【问题描述】:

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

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 的标志都可以为真。假设任何objectx正确实现了modify方法(基本上,对象实例是从同一个基类继承的不同类型,所以它们都有modify方法,但这些对象之间的实现方式可能不同)。

【问题讨论】:

  • 这需要更多上下文。这些是什么类型的物体,你用它们做什么?

标签: python oop static-methods


【解决方案1】:

使用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')

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 2014-11-13
    • 2013-01-22
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多