Python3.7变量链方法调用

2024-05-12 22:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个与这里引用的类似的问题-Dynamic Method Call In Python 2.7 using strings of method names

下面是我的工作方法调用的示例,最后的方法基于给定的数据类型,在本例中.string_value

tag.fields[field["key"]].string_value = field["value"]

但是,我不会总是只分配字符串,因为还有用于其他数据类型的方法。我尝试了一个类似于链接线程中引用的解决方案:

typer = getattr(datacatalog_v1.types.TagField, f"{field['type']}_value")
tag.fields[field["key"]].typer = field["value"]

typer是我的新动态方法调用,但它不起作用。我收到这个错误-'TagField' object has no attribute 'typer'

有什么建议吗


Tags: 方法keyinfieldfieldsstringvaluetag
1条回答
网友
1楼 · 发布于 2024-05-12 22:19:03

这很有趣。我不确定您使用的是什么包/数据类型,但是看起来您有两个问题

首先,getattr返回一个字符串,不能调用字符串,例如“python”()

第二,如果在getattr()之后删除(),typer将是一个字符串数据,您不能这样使用它。在

tag.fields[field["key"]].typer

typer必须是某种类型的方法/属性,而不是字符串。最好的方法是构建if语句或dict,将不同的typer值与不同的方法/属性调用结合起来

type_methods = {'string_value': tag.fields[field["key"]].string_value, 
                'int_value': tag.fields[field["key"]].int_value, 
                'json_value': tag.fields[field["key"]].json_value} 
typer = getattr(datacatalog_v1.types.TagField, f"{field['type']}_value")
type_method[type] = field["value"]

更新:

有一个setattr(对象、名称、值)函数

typer = getattr(datacatalog_v1.types.TagField, f"{field['type']}_value")
setattr(tag.fields[field['key']], typer, field['value'])

相关问题 更多 >