python - 如何在 Groovy 中设置对象的属性

标签 python groovy

我想在 Groovy 中编写与此 Python 代码等效的代码:

>>> class A(object): pass 
>>> a = A()
>>> name = os.name
>>> setattr(a, name, "some text")
>>> a
<__main__.A object at 0x10aad6a10>
>>> a.posix
'value'

我尝试过这个:

class TmpClass {}
def tmp = new TmpClass()
String name = getNameFromSomeWhere()
tmp.metaClass.setAttribute(tmp, name, "value")

但它抛出异常,表示找不到该属性。

编辑:我已更新代码以反射(reflect)属性/属性名称不是文字的事实。

最佳答案

如果您只是在寻找一种设置动态属性的方法,那么方括号表示法应该足够了:

tmp['name'] = 'value'
tmp[propertyName] = propertyValue //runtime property name and value

但是,如果您还需要使用新字段等动态增长对象,并且不想使用简单的映射,那么您可能应该使用 Expando (而不是类),它支持添加动态属性和闭包:

def tmp = new Expando()
tmp['name'] = 'value'
tmp[propertyName] = propertyValue //runtime values

关于python - 如何在 Groovy 中设置对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52220890/

相关文章:

python - opencv haar文件返回太多面部特征

python - 我有一个带有列表的 Pandas 专栏。对包含同一列中至少一个公共(public)元素的行进行分组

java - 在基类中使用静态 "member"变量。正在寻找更好的方法。单例?还是工厂?

grails - 在 Grails 中使用聚合函数派生属性

grails - Grails/Groovy编译器错误之谜

python - 计算多项 Logit 模型预测概率

python - pycharm:无法识别本地Python文件

python - 如何获取 boolean numpy 数组和另一个 boolean 数组的相对补集?

groovy - 对 Groovy MOP 中的 invokeMethod 方法感到困惑

docker - 无法在Jenkins中运行Groovy sh命令