草庐IT

Super-Resolution

全部标签

python - 如何在 Python 中调用父类(super class)中的子类方法

我想知道如何调用父类(superclass)中的子类方法。 最佳答案 我相信这是一种经常使用的模式。classA(object):defx(self):self.y()defy(self):print('defaultbehavior')classB(A):defy(self):print('ChildBbehavior')classC(A):defz(self):pass>>>B().x()ChildBbehavior>>>C().x()defaultbehavior它有点像抽象类,但提供了默认行为。但是我记不起模式的名称了。

python - Super可以处理多重继承吗?

像这样从两个对象继承时classFoo(object):def__init__(self,a):self.a=aclassBar(object):def__init__(self,b):self.b=b我通常会做这样的事情classFooBar(Foo,Bar):def__init__(self,a,b):Foo.__init__(self,a)Bar.__init__(self,b)super怎么知道我是否想调用两者?如果是这样,它将如何知道将哪个参数传递到哪里。还是根本不可能在这里使用super?即使Foo和Bar采用相同的参数,super也能处理这个问题吗?或者我一开始就不应该尝

python - 在父类中调用 `super()`

我正在阅读RaymondHettinger的Python’ssuper()consideredsuper!关于一个页面,有这个例子:classShape:def__init__(self,shapename,**kwds):self.shapename=shapenamesuper().__init__(**kwds)classColoredShape(Shape):def__init__(self,color,**kwds):self.color=colorsuper().__init__(**kwds)cs=ColoredShape(color='red',shapename='c

Python3 的 super 和 comprehensions -> TypeError?

在理解中使用python3的super似乎总是导致TypeError:super(type,obj):objmustbeaninstanceorsubtypeoftype(但使用python2的super确实按预期工作)classA(object):def__repr__(self):return"hi!"classB(A):def__repr__(self):return"".join(super().__repr__()foriinrange(2))repr(B())#output:)failed:TypeError:super(type,obj):objmustbeaninsta

Python 多重继承 : call super on all

我有以下两个父类(superclass):classParent1(object):defon_start(self):print('dosomething')classParent2(object):defon_start(self):print('dosomethingelse')我希望有一个继承自两者的子类能够为parent双方调用super。classChild(Parent1,Parent2):defon_start(self):#supercallonbothparents执行此操作的Pythonic方法是什么?谢谢。 最佳答案

python - 如何在 Python 的 mixin 中调用封闭类的 super?

我在Django中有以下代码:classParent(models.Model):defsave(self):#DoStuffAclassMixin(object):defsave(self):#DoStuffBclassA(Parent,Mixin):defsave(self):super(A,self).save()#DostuffC现在,我想使用mixin,而不用在Parent中公开保存的行为。所以当我保存时,我想做C、B和A。我读过Callingthesetterofasuperclassinamixin但是我不明白,并且阅读了super文档后它似乎没有回答我的问题。问题是,我

python - 如何通过手动填充 __class__ 单元格来使 super() 工作?

在Python3中,可以使用super()而不是super(MyClass,self),但这只适用于类内部定义的方法。如MicheleSimionato'sarticle中所述以下示例不起作用:def__init__(self):print('calling__init__')super().__init__()classC(object):__init__=__init__if__name__=='__main__':c=C()失败是因为super()寻找一个__class__cell,在这种情况下没有定义。是否可以在定义函数后手动设置此单元格,还是不可能?不幸的是,我不明白单元格在

python - 在派生自 `object` 的类中调用 super().__init__() ?

Pythondocumentation表示每个类的__init__方法负责初始化其父类(superclass)。但是对于新型类,最终的基类是object。执行dir(object)表明object本身有一个__init__方法并且可能被初始化。有什么理由这样做吗?我倾向于这样做是为了保持一致性和(稍微)更容易地重构类层次结构,但我想知道这是否绝对必要或是否被认为是最佳实践。 最佳答案 您不需要初始化对象;它的__init__是一个空操作。不过,这仍然是一种很好的做法,因为您稍后可能想在层次结构中引入一个中间类。

python - 'super' 对象没有属性 '__eq__'

当我尝试重写魔术方法__eq__,并使用super访问object中的基本方法时,出现错误.这不可能是一个错误,但感觉确实像一个错误:classA(object):def__eq__(self,other):returnsuper(A,self).__eq__(other)A()==0#raisesAttributeError:'super'objecthasnoattribute'__eq__'这是不直观的,因为object.__eq__存在,但对于classA(object):pass它不存在。如果我没记错的话,__eq__求助于is检查,所以这可能是这里的解决方法,但使用is而不

python - 调用 super 的 init 时 Python 中的最大递归深度错误。

这个问题在这里已经有了答案:Howtoavoidinfiniterecursionwithsuper()?(1个回答)关闭3年前。我有一个类层次结构AUnderstandingPythonsuper()with__init__()methods#!/usr/bin/pythonclassA(object):def__init__(self,v,v2):self.v=vself.v2=v2classB(A):def__init__(self,v,v2):#Dosomeprocessingsuper(self.__class__,self).__init__(v,v2)classC(B):