好吧,将我添加到爱上Ruby但对PyAddiction挥之不去的Python程序员的列表中。喜欢关于Python'sgetattr的帖子,我正在寻找与此等效的Ruby:setattr(obj,'attribute',value)其中obj是一个对象实例,attribute是对象属性之一的字符串名称,value是该对象的值。等效代码为:obj.attribute=value我假设这是可能的(因为现在在Python中的任何可能在Ruby中似乎更容易),但找不到它的文档。 最佳答案 obj.instance_variable_set("@
我刚刚在阅读帖子HowcanIassignanewclassattributevia__dict__inpython?@brunodesthuilliers有一条评论说:Oneshouldn'tdirectlycallmagicmethods-theyarehereasimplementationofoperatorsorgenericfunctions.Inthiscase,theidiomaticsolutionistousesetattr(obj,name,value).setattr的情况似乎超出了他自己的评论范围:不是运算符,也不是通用函数的真正实现。有人可以解释评论吗?为什
目前,我在类的__init__()方法末尾覆盖类的__setattr__()方法以防止创建新属性-classPoint(object):def__init__(self):self.x=0self.y=0Point.__setattr__=self._setattrdef_setattr(self,name,value):ifnothasattr(self,name):raiseAttributeError("'"+name+"'notanattributeofPointobject.")else:super(Point,self).__setattr__(name,value)有没有
这个问题在这里已经有了答案:Isitpossibletoindexnestedlistsusingtuplesinpython?(7个答案)关闭4个月前。有很多不错的类似getattr()的函数用于解析嵌套的字典结构,例如:FindingakeyrecursivelyinadictionarySupposeIhaveapythondictionary,manynestshttps://gist.github.com/mittenchops/5664038我想做一个并行的setattr()。本质上,给定:cmd='f[0].a'val='whatever'x={"a":"stuff"}我
type.__setattr__用于类,基本上是元类的实例。另一方面,object.__setattr__用于类的实例。这是完全明白的。我看不出这两种方法有什么显着差异,至少在Python级别,我注意到这两种方法使用相同的过程来分配属性,如果我错了请纠正我:假设a是一个用户定义类的实例,只是一个普通类:classA:passa=A()a.x=...然后a.x=..调用type(a).__setattr__(...)执行以下步骤:注意:type(a).__setattr__将在object内置类中找到__setattr__1)在type(a).__mro__中查找数据描述符。2)如果找到
我知道您不能对不是从object继承的对象调用object.__setattr__,但是两者之间还有什么不同吗?如果这很重要,我正在使用Python2.6。 最佳答案 再次阅读这个问题我误解了@paper.cut所问的内容:经典类和新型类之间的区别(在Python3+中不是问题)。我不知道这个问题的答案。原始答案*setattr(instance,name,value)是instance.__setattr__(name,value)**的语法糖。您只需要在类定义中调用object.__setattr__(...),然后仅当直接对o
我正在尝试做这样的事情:property='name'value=Thing()classA:setattr(A,property,value)other_thing='normalattribute'def__init__(self,etc)#etc..........但我似乎无法找到对类的引用来让setattr像在类定义中分配一个变量一样工作。我该怎么做? 最佳答案 你可以做得更简单:classA():vars()['key']='value'与之前的答案相比,此解决方案适用于外部元类(例如Django模型)。
我尝试为某些类的属性赋值像下面这样:fornameindir(modelType):ifrequest.get(name):getattr(model,name)=request.get(name)但得到异常:“无法分配给函数调用”如何在编译时不知道它们的情况下更改属性? 最佳答案 您使用setattr()为属性赋值。参见:http://docs.python.org/library/functions.html#setattr 关于python-使用getattr分配属性,我们在Sta
这个问题在这里已经有了答案:Databaseontheflywithscriptinglanguages[closed](8个答案)关闭4年前。我有一个csv文件,第一行作为字段,其余行作为数据。我想用这个文件创建一个表。由于字段很长并且可能会有所不同,因此我想动态创建它。经过几次尝试和搜索,我想我也许可以从工厂生成一个类,然后将属性分配给新类可以生成动态列。但它失败了。并且根据这个错误,我尝试了一些其他的方法,都失败了。请帮忙。我在考虑这样的想法是否可行。Reader=csv.reader(open('Book1.csv','rb'),delimiter=',',quotechar=
这个问题在这里已经有了答案:Databaseontheflywithscriptinglanguages[closed](8个答案)关闭4年前。我有一个csv文件,第一行作为字段,其余行作为数据。我想用这个文件创建一个表。由于字段很长并且可能会有所不同,因此我想动态创建它。经过几次尝试和搜索,我想我也许可以从工厂生成一个类,然后将属性分配给新类可以生成动态列。但它失败了。并且根据这个错误,我尝试了一些其他的方法,都失败了。请帮忙。我在考虑这样的想法是否可行。Reader=csv.reader(open('Book1.csv','rb'),delimiter=',',quotechar=