Python 从对象中提取属性以进行函数输入

Python 从对象中提取属性以进行函数输入,python,tensorflow,keras,Python,Tensorflow,Keras,我正在从Tensorflow中的一个对象提取一个属性,并试图将其输入到另一个函数中。但是,该属性被提取为字符串,但如果我在函数中键入它,它就会起作用。是否有一种方法可以“解除”此属性以输入到函数中 以下是我所做的导致类型错误的操作: layer = model.layers[2]._keras_api_names[0] print(layer) #output: tf.keras.layers.Conv2D type(layer) #output: str function(model.l

我正在从Tensorflow中的一个对象提取一个属性,并试图将其输入到另一个函数中。但是,该属性被提取为字符串,但如果我在函数中键入它,它就会起作用。是否有一种方法可以“解除”此属性以输入到函数中

以下是我所做的导致类型错误的操作:

layer = model.layers[2]._keras_api_names[0] 
print(layer) #output: tf.keras.layers.Conv2D 
type(layer) #output: str 
function(model.layers[2]._keras_api_names[0]) #TypeError
这是工作代码:

function(tf.keras.layers.Conv2D) #this works

您需要的是将函数的字符串名称转换为实际函数。 这可以通过内置Python实现:


“此属性提取为字符串”;不标有“\u keras\u api\u names”的列表包含字符串。通过执行
tf.keras.layers.Conv2D
得到的值与文本
tf.keras.layers.Conv2D
不同,这与变量
layer
不同于字符串literal
“layer”
。我的意思是,你认为
\u keras\u api\u names
的名称部分是关于什么的?谢谢你澄清@KarlKnechtel。我明白你所说的关于值与文本的区别。有没有办法将值“转换”为文本?谢谢您的回复。然而,当我输入它时,我得到一个错误。AttributeError:'Conv2D'对象没有属性'keras.layers.Conv2D'。你知道是什么原因造成的吗?对不起,我在描述问题之前无意中提交了我的评论。我刚刚编辑了一个错误。你知道是什么导致属性错误吗?是的,你需要的属性是
Conv2D
,而不是它的整个路径。所以需要从长字符串中提取这个。我已经更新了我的答案,解决了这个问题,非常感谢!在我接受这个答案之前,还有最后一个问题。我得到“”作为打印(api)的输出。有没有办法让它精确匹配“tf.keras.layers.Conv2D”?表明这两个是同一件事。如果您
打印(tf.keras.layers.Conv2D)
您应该会得到相同的长输出。
layer_name = model.layers[2]._keras_api_names[0]
# layer name is now tf.keras.layers.Conv2D
# So we need to extract everything after last dot:
layer_name = layer_name.rsplit('.', 1)[1] # now we have Conv2D
api = getattr(tf.keras.layers, layer_anme)
function(api)