为了账号安全,请及时绑定邮箱和手机立即绑定

如何理解 super(Teacher, self)这句?

class Teacher(Person):
    def __init__(self, name, gender, course):
        #Person.__init__(self, name, gender)也可
        #super(Teacher, self)是表示 Teacher 的父类?self参数如何理解?
        super(Teacher, self).__init__(name, gender)
        self.course = course


       super(Teacher, self).__init__(name, gender) 也可写为

       Person.__init__(self, name, gender)

       

       所以super(Teacher, self)是想引用到 Teacher 的父类?self参数如何理解?

正在回答

1 回答

super(type, [object-or-type])

  Return the superclass of type. If the second argument is omitted the super object
  returned is unbound. If the second argument is an object, isinstance(obj, type) 
  must be true. If the second argument is a type, issubclass(type2, type) must be 
  true. super() only works for new-style classes.

从定义可以得出:首先此方法返回的是第一个参数type的父类;其次,如果第二个参数是一个type,那么 issubclass(type2, type)返回true,也就是说type2是type的子类。套用在super(Teacher, self)中,返回的是Teacher的父类,也就是Person类,而其中的第二个参数self不是指Teacher,而是指其父类Person。

其实,从这两句:Person.__init__(self, name, gender)和super(Teacher, self).__init__(name, gender)对比就能得出,第一个self指的是Person,那么第二句中的self也肯定指Person啦~~~~

最后,对于单继承,还是写super好,因为可维护性高,省的父类的名字改了,子类中的内容也要跟着改


4 回复 有任何疑惑可以回复我~
#1

wheeeat 提问者

写得很全面很有针对性!粗读了一遍只get了7成。我再咂摸咂摸。
2016-07-07 回复 有任何疑惑可以回复我~
#2

wheeeat 提问者

哦对了 谢谢!
2016-07-07 回复 有任何疑惑可以回复我~
#3

CuiYS

我想问问那些英文的文档在哪里有比较全面的?
2016-07-31 回复 有任何疑惑可以回复我~
#4

程序猿和攻城狮 回复 CuiYS

https://docs.python.org/2/library/functions.html#built-in-functions
2016-07-31 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

如何理解 super(Teacher, self)这句?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信