Python 如何访问对象内的嵌套属性

Python 如何访问对象内的嵌套属性,python,tensorflow,Python,Tensorflow,我使用的是tensorflow对象检测器代码,但这并不仅仅是tensorflow问题。我制作了一个函数,将最有用的参数保存到文本文件中。我正在使用代码: configs = config_util.get_configs_from_pipeline_file(FLAGS.pipeline_config_path) 获取实际的config对象config本身是dict,但它包含的值都是tensorflow特定的对象 model_config = configs['model'] type(mod

我使用的是tensorflow对象检测器代码,但这并不仅仅是tensorflow问题。我制作了一个函数,将最有用的参数保存到文本文件中。我正在使用代码:

configs = config_util.get_configs_from_pipeline_file(FLAGS.pipeline_config_path)
获取实际的
config
对象
config
本身是
dict
,但它包含的值都是tensorflow特定的对象

model_config = configs['model']
type(model_config)
对象检测.protos.model\u pb2.DetectionModel

对象\u detection.protos.train\u pb2.TrainConfig

每个对象都包含其他tensorflow类对象,我可以通过
getattr
函数访问这些对象,如:

type(getattr(train_config.optimizer, 'rms_prop_optimizer'))
对象\u detection.protos.optimizer\u pb2.RMSPropOptimizer

因为我可以在实际的文本配置文件中看到各种参数,所以我可以使用这些
getattr
链来获得我感兴趣的实际值。问题是它变得很长(我会说很难看),而且它感觉不到正确的方式。例如,要从中获得实际学习率,我必须使用:

getattr(getattr(getattr(getattr(train_config.optimizer, 'momentum_optimizer'), 'learning_rate'), 'manual_step_learning_rate'), 'initial_learning_rate')
0.000300000142492354

好的,这里有一些舍入误差,但这不是重点

我想提到的是,在object中使用更高级别的
项似乎对这些对象不起作用

我想知道是否有任何方法可以得到这个值,这是一种更漂亮的方法吗?这是一种不易出错的方法,即使不知道实际的文本配置文件也适用


严格来说,这不是tensorflow问题,因为
getattr
方法可以应用于任何具有属性的对象,但如果存在tensorflow解决方案,我愿意接受。

尝试在对象上使用“dir()”函数。它会告诉你你能叫什么。如果它是一本字典,你可以继续使用键值对。此外,点概念可能会一直起作用。(很抱歉,在手机上无法进行测试)
dir()
和dot似乎都不起作用。他们得到了一些属性,但不是我想要的(不知道为什么)。
getattr(getattr(getattr(getattr(train_config.optimizer, 'momentum_optimizer'), 'learning_rate'), 'manual_step_learning_rate'), 'initial_learning_rate')