2010-01-25 95 views
8

那么,请将我添加到正在爱上Ruby的Python程序员列表中,但有一个挥之不去的PyAddiction。喜欢该职位约Python's getattr,我找了Ruby相当于这样做的:Ruby的等价的Python setattr()

setattr(obj, 'attribute', value) 

其中obj是一个对象实例,属性是作为字符串对象的属性之一的名称和值是该对象的值。等效代码之中:

obj.attribute = value 

我假设这是可能的(因为任何可能在Python似乎甚至在红宝石现在更容易),但无法找到它的文档。

回答

14

obj.instance_variable_set("@instance_variable", value)obj.send("instance_variable=", value)

前者直接设置实例变量。后者调用setter方法,这当然只在存在setter方法的情况下才起作用,但另一方面,如果你有一个setter方法实际上只设置一个实例变量(或者没有设置实例)可变)。

+2

注意:“instance_variable_set”和“send”的第一个参数也可以是符号 – horseyguy 2010-01-26 00:53:39