本文介绍了python 2.7中的超级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试了解如何在 python 中使用 super
I'm trying to understand how to use super
in python
class people:
name = ''
age = 0
__weight = 0
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s is speaking: I am %d years old" %(self.name,self.age))
class student(people):
grade = ''
def __init__(self,n,a,w,g):
#people.__init__(self,n,a,w)
super(student,self).__init__(self,n,a,w)
self.grade = g
def speak(self):
print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))
s = student('ken',20,60,3)
s.speak()
以上代码报错如下:
---------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-147-9da355910141> in <module>()
10
11
---> 12 s = student('ken',20,60,3)
13 s.speak()
<ipython-input-147-9da355910141> in __init__(self, n, a, w, g)
3 def __init__(self,n,a,w,g):
4 #people.__init__(self,n,a,w)
----> 5 super(student).__init__(self,n,a,w)
6 self.grade = g
7
TypeError: must be type, not classobj
我很困惑为什么在这种情况下我不能使用 super(student,self).__init__(self,n,a,w)
,以及为什么我必须使用 people.__init__(self,n,a,w)
I'm confused about why I cannot use super(student,self).__init__(self,n,a,w)
in this case, and why I have to use people.__init__(self,n,a,w)
有什么帮助吗?
推荐答案
你的基类 people
应该派生自 object
类,使其成为一种新风格类,这将允许 super()
工作.
Your base class people
should be derived from the object
class, to make it a new-style class, which will allow super()
to work.
然后你应该使用 super
作为:
You should then use super
as:
super(student, self).__init__(n,a,w)
旧式类的行为完全不同,我不理解它们
Old-style classes behave quite differently, and I don't understand them
这篇关于python 2.7中的超级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!