在getattr()函数上调用一个方法

ved*_*dar 3 python python-3.x

python-metar用来解码METAR数据.解析METAR字符串后返回的对象如下所示:

>>> dir(decoded)[-5:]
['wind_shift', 'wind_shift_time', 'wind_speed', 'wind_speed_peak', 'windshear']
Run Code Online (Sandbox Code Playgroud)

这些属性,还有其他方法- value(),unit()string().我使用getattr()内置函数遍历所有这些:

>>> attributes = [..., 'wind_speed', 'wind_speed_peak', 'windshear']
>>> for attr in attributes:
>>>    print(getattr(decoded, attr))
Run Code Online (Sandbox Code Playgroud)

但是这样我得到了默认的字符串表示,这是一个带有值及其单位的字符串,比如10 knots,虽然我想得到的数值,我可以通过value()方法得到:

>>> decoded.wind_speed.value()
10.0
Run Code Online (Sandbox Code Playgroud)

所以我无法想象如何使用getattr()并同时调用一个方法(在本例中为value()方法).

Nil*_*esh 5

使用您的代码,getattr将返回到decoded.wind_speed.如果要调用value函数,则decoded.wind_speed必须value()使用对象返回调用getattr.

print(getattr(decoded, attr).value())
Run Code Online (Sandbox Code Playgroud)

要么

您可以使用另一个getattr来调用value方法.

print(getattr(getattr(decoded, attr)), "value")()
Run Code Online (Sandbox Code Playgroud)