我有一个Event
对象,它可以有许多属性,其中一些是单值,其中一些是值列表。
class Event(object):
pass
event = Object()
event.b = [10, 20, 30]
event.c = 15
我试图访问所有属性,这样我最终得到了很多单值,有点像这样:
print(Variable(event = event, name = "b[0]")
print(Variable(event = event, name = "b[1]")
print(Variable(event = event, name = "b[2]")
print(Variable(event = event, name = "c" )
为了做到这一点,我创建了一个Variable
类:
class Variable(object):
def __init__(
self,
name = None,
value = None,
event = None,
):
self._name = name
self._value = value
self._event = event
if self._value is None:
# add magic here
self._value = getattr(self._event, self._name)
def name(
self
):
return self._name
def value(
self
):
return self._value
我希望这个变量类能够理解指定名称末尾的“[2]
”意味着该属性是一个列表,并且应该访问其索引2的元素并将其设置为变量实例的单一价值。什么是一个好方法呢?
请注意,这是我正在做的简化版本 - 实际上我正在处理数百万个事件和数千个属性,我正在尝试最小化我必须编写的代码量(并随后更改)通过使变量类智能化。
答案 0 :(得分:1)
我不知道一种优雅的方法,但你可以使用这样一个事实,即普通变量不应该有括号来分隔索引,然后编写一个基本上包裹{{1}的函数检查括号:
getattr
这并非真正意味着处理极端名称案例或错误,但它有望让您走上正确的轨道。