『壹』 python中的super()是什么意思呢

super就是在子类中调用父类方法时用的。

classFooParent(object):
def__init__(self):
self.parent='I'mtheparent.'
print'Parent'

defbar(self,message):
printmessage,'fromParent'

classFooChild(FooParent):
def__init__(self):
super(FooChild,self).__init__()#调用父类初始化方法
print'Child'

defbar(self,message):
super(FooChild,self).bar(message)#调用父类bar方法
print'Childbarfuction'
printself.parent

if__name__=='__main__':
fooChild=FooChild()
fooChild.bar('HelloWorld')

如果解决了您的问题请点赞!
如果未解决请继续追问

『贰』 python中super的使用

Yes, and since py3.5, `super(Man, self).__init__(name, has_wife)` can be replaced as below:

super().__init__(name,has_wife)

『叁』 python super函数

classA:
defprint1(self):
print('A')


classB:
defprint2(self):
super().print1()


b=B()
b.print2()

注意 self。默来认的调自用方式是调用绑定方法的。

『肆』 python语句(具体如下)super的用法不理解,求大神指教!本人初学者,刚刚开始学习中。。。

super().xxx的作用是调用父类的xxx方法,在重写xxx方法时,这个方法的内容已经和原方法完全无关了,因此如果希望在重写之后仍然能执行原方法的逻辑,就需要使用super().xxx来调用父类的原方法。

『伍』 关于python中super类

super 是用来解决多重继来承问题自的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。

『陆』 python super方法怎么访问多个超类

super(超类)其实有两个作用

  • 继承父类

  • 父类类名修改之后,不需要在所有子类中进行类名修改

  • 创建父类

  • >>> class A(object):... def __init__(self):... self.hungry = True... def eat(self):... if self.hungry:... print('i'm hungry!!!')... else:... print('i'm not hungry.')... 123456789

  • 继承父类

  • >>> class B(A): #括号中的A就是父类A,被B继承... def __init__(self): #此魔术方法覆盖了父类的构造方法__init__,即此类中的所有self只指自己(子类)... self.sound = 'love me.mp3'... def sing(self):... print(self.sound)


  • >>> s = B()

  • >>> s.sing()

  • love me.mp3

  • >>> s.eat() #B类没有继承到A类的所有方法及属性Traceback (most recent call last):

  • File "<input>", line 1, in <mole>

  • File "<input>", line 5, in eat12345678910111213

  • >>> class C(A):... def __init__(self):... super(C,self).__init__() #这种代码就有一个问题,如果A类的这个A名称被修改,所有有A的地方都需要修改

  • #等价代码是A.__init__(self)... self.sound = 'love me.mp3' ... def sing(self):... print(self.sound)... >>> ss = C()

  • >>> ss

  • <C object at 0x0000000004907E10>

  • >>> ss.sing()

  • love me.mp3

  • >>> ss.eat() #此时就继承到了A类中的所有属性及方法i'm hungry!!!

『柒』 请教在python2.7中如何使用super关键字

classFoo(object):
def__init__(self,frob,frotz):
self.frobnicate=frob
self.frotz=frotz

classBar(Foo):
def__init__(self,frob,frizzle):
super(Bar,self).__init__(frob,34)
self.frazzle=frizzle

new=Bar("hello","world")
printnew.frobnicate
printnew.frazzle
printnew.frotz

『捌』 python的类和对象中的super函数的问题

问题一
因为在B类中调用了super方法,所以没有执行完B类就去执行C类的程序
super方法在多重继承程序中的调用顺序,采用的是C3算法(在python3中)。
C3算法的规则如下

①.从底层开始,选择入边为零的点。

②.从左到右。

③深度探索。但受限于②规则。

每一个类都可以用mro函数查看自己的继承顺序(MRO全称Method Resolution Order,就是用来定义继承方法的调用顺序)

对于你的程序

分析

①规则。得到D类,去掉D类以后,入边为零的是B类和C类

②规则。选择B类,去掉B类后,入边为零的只有C类。结论是D–>B–>C–>A。

在d=D()语句前加print(D.mro()),就可以打印出D类的继承顺序

[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
问题二
python3的继承不同于普通的继承,super函数已经考虑到了重复继承的问题,所以对于A类只访问一次

『玖』 python中super()函数的意义,最好浅显易懂,以及用法,谢谢

调用父类, 和parent一个意思. 只不过python使用的继承方式有点特别, 所以用起来有点特别

php"><?php
classA
{
functionhello()
{
print"A ";
}
}

classSonOfA
{
functionhello()
{
parent::hello();
}
}

那么在python里就是通过 super(A, self) 获得指向父类的指针(当成指针好了), 然后调用hello.

super(A,self).hello()#相当于呼叫A的hello
#据说python3,可以
super().hello()

『拾』 python super()用法遇到TypeError: must be type, not classobj

第一关于

super().__init__()

这种不指定子类的继承方法是在Python 3中新加入的,因为你使用的是Python 2, 所以会报错。


第二,关于TypeError,请题主在定义两个父类的时候加入他们的父类(object),如下,再尝试一次,因为Python 2中的classobj不算做一种type,如果你用Python 3的话应该就没有这种问题了。

classBase1(object):
def__init__(self):
print"我是Base1"

classBase2(object):
def__init__(self):
print"我是Base2"


另外一点题外话,题主对Base这个子类采用了双重继承,即此子类同时拥有两个父类(Base1和Base2),这种继承方法有时容易造成混乱,即如果两个父类有相同的方法名或变量名时,无法确定应继承哪一个。因此在诸如Java等语言中多重继承是不允许的。Python允许多重继承,但在这种情况下为了避免混乱,Python会自动按顺序选择拥有所需方法名的第一个父类并执行,而忽略其他父类中的同名方法。比如你的

classBase(Base1,Base2):
def__init__(self):
super(Base,self).__init__()

中,使用

super(Base,self).__init__()

来呼叫Base父类的__init__方法,由于Base的父类有两个(Base1和Base2),并且两个都有__init__方法,所以Python默认只按顺序呼叫Base1的__init__方法而忽略Base2的。这样你运行

bbbb=Base()

时就只会显示

我是Base1

而不会显示“我是Base2”。如果你要使用super()方法并希望像使用

classBase(Base1,Base2):
def__init__(self):
Base1.__init__(self)
Base2.__init__(self)

时一样同时输出“我是Base1”和“我是Base2”的话,你需要修改代码使Base2为Base1的子类,Base为Base2的子类才可以。如下:

classBase1(object):
def__init__(self):
print"我是Base1"

classBase2(Base1):
def__init__(self):
super(Base2,self).__init__()
print"我是Base2"

classBase(Base2):
def__init__(self):
super(Base,self).__init__()

这样你运行

bbbb=Base()

时才会输出

我是Base1
我是Base2