我将一个对象包裹在另一个对象中。“Wrapper”通过覆盖__getattr__来访问“Wrapped”对象的属性。这很好用,直到我需要覆盖子类的属性,然后使用super()从基类访问属性。我仍然可以直接从__getattr__访问该属性,但是为什么super()不起作用?classWrapped(object):def__init__(self,value):self.value=valuedefhello_world(self):print'helloworld',self.valueclassWrapper(object):def__init__(self,obj):self.w
在阅读super()上的Python文档时,我偶然发现了以下声明:Ifthesecondargumentisomitted,thesuperobjectreturnedisunbound.“未绑定(bind)”是什么意思以及如何将super()与一个参数一起使用? 最佳答案 Python函数对象是descriptors,Python使用描述符协议(protocol)将函数绑定(bind)到一个实例。这个过程产生一个绑定(bind)方法。绑定(bind)是在您调用方法时使“魔术”self参数出现的原因,也是在您尝试使用该属性时使pro
我想知道什么时候使用Python3的什么风格super()。Helponclasssuperinmodulebuiltins:classsuper(object)|super()->sameassuper(__class__,)|super(type)->unboundsuperobject|super(type,obj)->boundsuperobject;requiresisinstance(obj,type)|super(type,type2)->boundsuperobject;requiresissubclass(type2,type)到目前为止,我只使用了没有参数的supe
我使用Python3并想用一个自定义类来包装argparse.ArgumentParserformatter_class=argparse.RawDescriptionHelpFormatter默认。我可以成功地做到这一点,但是带有Python插件(PyCharm)的IntelliJIDEA2017.1会针对以下代码发出警告:classCustomParser(argparse.ArgumentParser):def__init__(self,formatter_class=argparse.RawDescriptionHelpFormatter,**kwargs):#noinspec
我在Pythonsuper()以及继承和属性方面遇到了一个非常奇怪的问题。一、代码:#!/usr/bin/envpython3importpygletimportpygameclassSprite(pyglet.sprite.Sprite):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)self.rect=pygame.Rect(0,0,self.width,self.height)self.rect.center=self.x,self.y@propertydefx(self):returnsuper
想象一下:classA(object):classB(object):def__init__(self):super(B,self).__init__()这会产生错误:NameError:globalnameBisnotdefined.I'vetriedA.B,butthenitsaysthatAisnotdefined.Update:I'vefoundtheproblem.I'vehadaclasslikethis:classA(object):classB(object):def__init__(self):super(B,self).__init__()someattribute
我试图了解何时以及如何在Python中正确使用super()(2.7.x或3.x)在>>>help(super)解释器告诉我如何调用它:classsuper(object)|super(type)->unboundsuperobject|super(type,obj)->boundsuperobject;requiresisinstance(obj,type)|super(type,type2)->boundsuperobject;requiresissubclass(type2,type)我知道在Python3.x中现在可以在类定义中使用super(),但我不明白为什么super(o
我只是在深入研究一些更高级的python主题(嗯,至少对我来说是高级的)。我现在正在阅读有关多重继承以及如何使用super()的内容。我或多或少了解super函数的使用方式,但是(1)这样做有什么问题?:classFirst(object):def__init__(self):print"first"classSecond(object):def__init__(self):print"second"classThird(First,Second):def__init__(self):First.__init__(self)Second.__init__(self)print"that
正如我刚刚学到的,我可以这样使用super():super(class,obj_of_class-or-_subclass_of_class)代码如下:#Case1classA(object):def__init__(self):print"Ainit"classB(A):def__init__(self):print"Binit"super(B,self).__init__()#ok,IcaninvokeA's__init__successfully#Case2classA(object):@classmethoddeffoo(cls):print"Afoo"classB(objec
一个Python子类可以在调用或不调用super()的情况下进行初始化,如下所示classParent(object):...classChild(Parent):def__init__(self):super(Child,self).__init__()classChild(Parent):def__init__(self):Parent.__init__(self)这些情况之间有什么区别,一种通常比另一种更可取? 最佳答案 super的目的是处理继承钻石。如果上课继承结构只使用单继承,然后使用super()将导致与显式调用“父”