繁体   English   中英

Python 3.7 变量链式方法调用

[英]Python 3.7 Variable Chained Method Calls

我遇到了与此处引用的类似问题 - 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'

有什么建议么?

这很有趣。 我不确定你在处理什么包/数据类型,但看起来你有 2 个问题。

首先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(object, name, value) function

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM