我在这里获得了Data
这样的数据结构:
Data.whatever.t # (contains time)
Data.whatever.log.vel # (contains velocity)
Data.a # (contains acceleration)
我希望以优雅/ pythonic的方式将它们映射到一个对象,以便我有:
data.t
data.velocity
data.acceleration
我正在考虑使用json文件来硬编码映射,例如:
{
"Data": [
{
"t": "whatever.t",
"velocity": "whatever.log.vel",
"acceleration": "a",
},
]
}
但我不知道如何从这里开始。有什么建议吗?
答案 0 :(得分:0)
我建议创建一个proxy class来更改结构的界面,这听起来就像你追求的那样。
取决于你的情况"给予"这个结构(看起来像一个类属性指向其他对象的类)你可以把它作为你的类的参数,或者实例化你自己。例如,如果您将此结构作为输入传递:
from types import SimpleNamespace # for mimicking your "Data" structure
# creating this:
# Data.whatever.t # (contains time)
# Data.whatever.log.vel # (contains velocity)
# Data.a # (contains acceleration)
Data = SimpleNamespace(
a='someacceleration',
whatever=SimpleNamespace(
t='sometime',
log=SimpleNamespace(
vel='somevelocity'
)
)
)
# Relevant part of solution
class ProxyClass:
def __init__(self, somedata):
self._proxy_data = somedata
self.t = self._proxy_data.whatever.t
self.velocity = self._proxy_data.whatever.log.vel
self.acceleration = self._proxy_data.a
In [2]: Data
Out[2]: namespace(a='someacceleration', whatever=namespace(log=namespace(vel='somevelocity'), t='sometime'))
In [3]: data = ProxyClass(Data)
In [4]: data.acceleration
Out[4]: 'someacceleration'
In [5]: data.velocity
Out[5]: 'somevelocity'
In [6]: data.t
Out[6]: 'sometime'
答案 1 :(得分:0)
也许你应该首先学习python class。
一个简单的演示:
class T(object):
pass
class Velocity(object):
pass
class Acceleration(object):
pass
class Data(object):
def __init__(self):
self.t = T()
self.velocity = Velocity()
self.acceleration = Acceleration()
data = Data()
print(data.t)
print(data.velocity)
print(data.acceleration)