ikel ikel - 1 year ago 144
Python Question

super in python 2.7

I'm trying to understand how to use

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):
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)

The above code gets following error:

TypeError Traceback (most recent call last)
<ipython-input-147-9da355910141> in <module>()
---> 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

TypeError: must be type, not classobj

I'm confused about why I cannot use
in this case, and why I have to use

Any help?

Answer Source

Your base class people should be derived from the object class, to make it a new-style class, which will allow super() to work.

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