web-dev-qa-db-ja.com

スーパーのpython 2.7

Pythonでsuperを使用する方法を理解しようとしています

_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)を使用する必要がある理由について混乱しています

何か助けは?

8
ikel

基本クラスpeopleobjectクラスから派生し、super()が機能する新しいスタイルのクラスにする必要があります。

次に、superを次のように使用する必要があります。

super(student, self).__init__(n,a,w)

古いスタイルのクラスの動作はかなり異なり、理解できません

19
Simon Callan