jjzjj

python - getattr 和 setattr 在嵌套子对象/链接属性上?

我有一个对象(Person),它有多个子对象(Pet,Residence)作为属性。我希望能够像这样动态设置这些子对象的属性:classPerson(object):def__init__(self):self.pet=Pet()self.residence=Residence()classPet(object):def__init__(self,name='Fido',species='Dog'):self.name=nameself.species=speciesclassResidence(object):def__init__(self,type='House',sqft=No

python - getattr 和 setattr 在嵌套子对象/链接属性上?

我有一个对象(Person),它有多个子对象(Pet,Residence)作为属性。我希望能够像这样动态设置这些子对象的属性:classPerson(object):def__init__(self):self.pet=Pet()self.residence=Residence()classPet(object):def__init__(self,name='Fido',species='Dog'):self.name=nameself.species=speciesclassResidence(object):def__init__(self,type='House',sqft=No

python - 对 python 类同时使用 __setattr__ 和描述符

我正在编写一个python类,它使用__setattr__和__getattr__来提供自定义属性访问。但是,某些属性无法以通用方式处理,因此我希望为这些属性使用描述符。问题在于,对于描述符,描述符的__get__将被调用以支持实例__getattr__,但是当分配给属性时,__setattr__将被调用以支持描述符__set__。一个例子:classMyDesc(object):def__init__(self):self.val=Nonedef__get__(self,instance,owner):print"MyDesc.__get__"returnself.valdef__s

python - __setattr__() 可以在带有 __slots__ 的类中定义吗?

假设我有一个定义了__slots__的类:classFoo(object):__slots__=['x']def__init__(self,x=1):self.x=x#willthefollowingwork?def__setattr__(self,key,value):ifkey=='x':object.__setattr__(self,name,-value)#Haha-let'ssettominusx我可以为它定义__setattr__()吗?由于Foo没有__dict__,它会更新什么? 最佳答案 除了取反值之外,您的所有代

python - 在 Python 中使用 getattr/setattr 访问列表项

尝试在Python中使用getattr和setattr函数访问/分配列表中的项目。不幸的是,似乎无法将列表索引中的位置与列表名称一起传递。这是我对一些示例代码的一些尝试:classLists(object):def__init__(self):self.thelist=[0,0,0]Ls=Lists()#tryingthisonlygives't'asthesecondargument.Pythonerrorresults.#Interestingthatyoucansliceastringtointhegetattr/setattrfunctions#Hereonecouldacce

python 如何使用 setattr 或 exec 创建私有(private)类变量?

我刚刚遇到这样一种情况,在使用setattr或exec时,pseudo-private类成员名称没有被破坏。In[1]:classT:...:def__init__(self,**kwargs):...:self.__x=1...:fork,vinkwargs.items():...:setattr(self,"__%s"%k,v)...:In[2]:T(y=2).__dict__Out[2]:{'_T__x':1,'__y':2}我已经尝试了exec("self.__%s=%s"%(k,v))也得到了同样的结果:In[1]:classT:...:def__init__(self,**

Python - 如何从类中动态删除方法 - 即与 setattr 相反

我不知道我这里的设计是否很好,但我有一个派生自unittest.TestCase的类以及我设置它的方式,我的代码将动态注入(inject)一堆test_*方法在调用unittest运行它之前进入类。为此,我使用setattr。这一直运作良好,但现在我有一种情况,我想删除我以前注入(inject)的方法并注入(inject)一组新方法。如何删除名称与模式test_*匹配的类中的所有方法? 最佳答案 它称为delattr并记录在案here. 关于Python-如何从类中动态删除方法-即与se

Python 元类 : Why isn't __setattr__ called for attributes set during class definition?

我有以下python代码:classFooMeta(type):def__setattr__(self,name,value):printname,valuereturnsuper(FooMeta,self).__setattr__(name,value)classFoo(object):__metaclass__=FooMetaFOO=123defa(self):pass我希望元类的__setattr__被FOO和a调用。但是,它根本没有被调用。当我在定义类后将某些内容分配给Foo.whatever时,方法被调用。这种行为的原因是什么?有没有办法拦截在创建类期间发生的分配?在__ne

python - 为什么 setattr 和 getattr 允许空格?

假设我定义了这个类:classA:passa=A()现在显然我可以像这样设置属性:a.x=5但是使用setattr,我可以给a属性,它们的名称中包含空格。setattr(a,'whitespace',1)setattr(a,'new\nline',None)dir(a)包含'whitespace'和'new\nline'。我无法使用.运算符访问这些属性,因为它会引发SyntaxError:>>>a.whitespaceFile"",line1a.whitespace^SyntaxError:invalidsyntax>>>a.new\nlineFile"",line1a.new\nli

python - Python 中的 __set__ 和 __setattr__ 有什么区别,应该在什么时候使用?

正如标题所说。来自Java我曾经:privateintA;publicvoidsetA(intA){this.A=A;}publicintgetA(){returnthis.A}我如何在Python中执行此操作(如果需要)。如果__setattr__或__set__之一用于此,那么另一个用于什么?编辑:我觉得我需要澄清一下。我知道在Python中,doe不会在需要之前创建setter和getter。假设我想做这样的事情:publicvoidsetA(intA){update_stuff(A);and_calculate_some_thing(A);this.A=A;}实现它的“pyth