为类属性分配一个简短的名称

时间:2019-09-28 10:17:03

标签: python

我正在使用读取某些类型数据的Python包。它根据数据创建属性,以轻松访问与数据相关的元信息。

如何为属性创建简称?

基本上让我们假设包名称为read_data,并且它具有一个名为data_header_infomation_x_location的属性

import read_data
my_data = read_data(file_path)

我该如何为该属性创建简称?

x = "data_header_infomation_x_location"

my_data[1].x给出错误无属性

以下是我的案例的完整示例

from obspy.io.segy.core import _read_segy

file_path = "some_file_in_my_pc)
sgy = _read_segy(file_path, unpack_trace_headers=True)

sgy[1].stats.segy.trace_header.x_coordinate_of_ensemble_position_of_this_trace

最后一行给出一个数字。例如,x位置

我想要的是将所有这些长嵌套属性stats.segy.trace_header.x_coordinate_of_ensemble_position_of_this_trace重命名为短名称。

尝试

attribute = "stats.segy.trace_header.x_coordinate_of_ensemble_position_of_this_trace"

getattr(sgy[1], attribute )

不起作用

1 个答案:

答案 0 :(得分:1)

怎么样:

from obspy.io.segy.core import _read_segy

attribute_tree_x = ['stats', 'segy', 'trace_header', 'x_coordinate_of_ensemble_position_of_this_trace']

def get_nested_attribute(obj, attribute_tree):
    for attr in attribute_tree:
        obj = getattr(obj, attr)
    return obj

file_path = "some_file_in_my_pc"
sgy = _read_segy(file_path, unpack_trace_headers=True)

sgy[1].stats.segy.trace_header.x_coordinate_of_ensemble_position_of_this_trace
x = get_nested_attribute(sgy[1], attribute_tree_x) # should be the same as the line above

您无法一次性请求属性的属性,但是这会循环遍历各个图层以获得所需的最终值。