我有一个对象(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
我有一个对象(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类,它使用__setattr__和__getattr__来提供自定义属性访问。但是,某些属性无法以通用方式处理,因此我希望为这些属性使用描述符。问题在于,对于描述符,描述符的__get__将被调用以支持实例__getattr__,但是当分配给属性时,__setattr__将被调用以支持描述符__set__。一个例子:classMyDesc(object):def__init__(self):self.val=Nonedef__get__(self,instance,owner):print"MyDesc.__get__"returnself.valdef__s
假设我有一个定义了__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中使用getattr和setattr函数访问/分配列表中的项目。不幸的是,似乎无法将列表索引中的位置与列表名称一起传递。这是我对一些示例代码的一些尝试:classLists(object):def__init__(self):self.thelist=[0,0,0]Ls=Lists()#tryingthisonlygives't'asthesecondargument.Pythonerrorresults.#Interestingthatyoucansliceastringtointhegetattr/setattrfunctions#Hereonecouldacce
我刚刚遇到这样一种情况,在使用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,**
我不知道我这里的设计是否很好,但我有一个派生自unittest.TestCase的类以及我设置它的方式,我的代码将动态注入(inject)一堆test_*方法在调用unittest运行它之前进入类。为此,我使用setattr。这一直运作良好,但现在我有一种情况,我想删除我以前注入(inject)的方法并注入(inject)一组新方法。如何删除名称与模式test_*匹配的类中的所有方法? 最佳答案 它称为delattr并记录在案here. 关于Python-如何从类中动态删除方法-即与se
我有以下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
假设我定义了这个类: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
正如标题所说。来自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