python super类方法的含义

小白一枚,在公司python项目里看到两段super方法的代码

class AccountLoginMixinobject: #todo def get_context_dataself, **kwargs: context = superAccountLoginMixin, self.get_context_data**kwargs context[uid] = self.uid context[email] = self.email context[username] = self.username context[menu] = self.get_menu context[menuActive] = self.get_menu_active context[openMenu] = self.openMenu return context
class LoginViewTemplateView: template_name = accounts/login.html #todo def getself, request, *args, **kwargs: return superLoginView, self.getrequest, *args, **kwargs

1、在以上两段代码里看不到解决了什么继承问题,还是我的理解问题?
常规的实例如下,比较好理解:

普通继承
『代码』
[python]view plaincopy
class FooParentobject: def __init__self: self.parent = Im the parent.
printParent
def barself,message: print message, from Parent
class FooChildFooParent: def __init__self: FooParent.__init__self printChild
def barself,message: FooParent.barself,message printChild bar function.
printself.parent if __name__==__main__: fooChild = FooChild fooChild.barHelloWorld super继承
『代码』
[python]view plaincopy
class FooParentobject: def __init__self: self.parent = Im the parent.
printParent
def barself,message: print message,from Parent
class FooChildFooParent: def __init__self: superFooChild,self.__init__ printChild
def barself,message: superFooChild, self.barmessage printChild bar fuction
printself.parent if __name__ == __main__: fooChild = FooChild fooChild.barHelloWorld 

网上的例子都是这个样子,没觉得难理解啊。。。。 一到了具体项目里就晕了菜。

2、分别在两个地方看到super 的解释:
X1:super 是用来解决多重继承问题,直接用类名调用父类方法。

X2:superB, self.func的调用并不是用于调用当前类的父类的func函数。

摘抄的,有些矛盾。。。顿时神经混乱了阿衰。。。

遇事不决看文档 https://docs.python.org/3/library/functions.html#super

X1:super 是用来解决多重继承问题,直接用类名调用父类方法。

如果一个类继承自多个父类,super可以选择调用特定父类的方法。

X2:superB, self.func的调用并不是用于调用当前类的父类的func函数。

class CB: def methodself, arg: super.methodarg # This does the same thing as: # superC, self.methodarg

这段代码是官方文档上摘下来的,可能你摘抄的内容有上下语境

不要把 super 与当前类搞混到一起,它也可以放到外面使用,返回的对象完全取决于传给 super 的参数,看完下面这篇你一定可以弄清楚:

https://github.com/rainyear/pytips/blob/master/Markdowns/2016-05-01-Class-and-Metaclass-i.md

发表评论

电子邮件地址不会被公开。 必填项已用*标注