代码之家  ›  专栏  ›  技术社区  ›  Song

关于python中的继承,为什么人们不在子类中写“self”?[副本]

  •  -1
  • Song  · 技术社区  · 6 月前

    这里有一个例子。

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def get_name(self):
            print('My name is %s.'%self.name)
        
        def get_age(self):
            print('I am %d years old.'%self.age)
    
    class Student(Person):
        def __init__(self, name, age, GPA):
            super().__init__(name, age)
            self.GPA = GPA
    
        def get_GPA(self):
            print('My grade is %f.'%self.GPA)
    

    这引起了我的好奇心。

    当我创建Student类时, 不允许编码吗 super().__init__(self, name, age) ?

    如果没有,为什么不应该添加“自我”的确切原因是什么 super().__init__(name, age) ?

    1 回复  |  直到 6 月前
        1
  •  2
  •   wim    6 月前

    也许最好的答案是打个比方:如果你打电话给 get_PGA 方法 对于学生实例,你不会这样做:

    student.get_PGA(student)
    

    相反,你只会这样做 student.get_PGA() “自我”将被隐含地传递。

    同样,如果你从 在另一种方法中 你不会这样称呼它:

    class Student(Person):
    
        def foo(self):
            pga = self.get_PGA(self)
    
    

    你只需使用 self.get_PGA() 相反。

    调用方法时,第一个位置参数是隐式的 .这是同一个故事 Student.__init__ ,这只是一个方法,这里是由返回的代理实例 super() 被传递为“自我” implicitly .