在Python中,可以使用setattr
向对象添加新属性,如下面的代码
class Foobar:
def __init__(self):
pass
foobar = Foobar()
setattr(foobar, 'foo', 123)
print(foobar.foo)
输出
123
我知道在Julia中有setfield!
但它不允许在Python中添加像setattr
这样的新字段。
所以我的问题是有一种方法可以将新字段添加到复合类型的对象中吗?
答案 0 :(得分:12)
是否有办法将新字段添加到复合类型的对象?
没有。 Julia是故意设计的,没有这种局部动态行为。如果您需要动态添加和删除字段,那么您实际上将该对象用作具有不同语法的字典。在Julia中,您将使用实际字典 - Dict
或其他关联集合 - 用于此类用法。这没有比像Python这样的语言中的对象更差的性能,尽管它的性能会比Julia中的静态定义类型更差,但这是具有动态字段的对象的固有成本 - 这正是对象无法工作的原因朱莉娅的方式。