python教程

当前位置:首页 > python面向对象 > 当前文章

python面向对象

子类继承父类的易错面试题

2020-08-01 171赞 老董笔记

  今日有1个小案例可以测试能不能真正的理解对象、子类、父类的关系。题目如下:

# -*- coding:utf-8 -*-

class Person:

    def __init__(self):
        self.skill()

    def skill(self):
        print('我是基本人类')


class TianLong(Person):

    def skill(self):
        print('我是武侠人物')


if __name__ == "__main__":
    p = TianLong()
我是武侠人物

  1)子类TianLong里面没有__int__方法,所以创建对象的时候会找到父类Person的构造方法。

  2)父类的构造方法中执行了self.skill(),那么问题的关键就是此时此刻这个self是谁。

  3)此时是子类TianLong在创建对象时调用__init__,因此self是子类对象,自然self.skill()也是执行的子类内部的方法。

  始终都要记得对象、子类、父类各自有各自的内存空间,但是因为继承关系的存在使得子类可以去找到父类的属性和方法,所以self虽然写在了父类里面,但是创建子类的对象时self是子类的对象。

  如果不好理解,那么上述代码的效果等同于如下代码:

# -*- coding:utf-8 -*-

class Person:

    def __init__(self):
        self.skill()

    def skill(self):
        print('我是基本人类')


class TianLong(Person):
    def __init__(self):
        self.skill()

    def skill(self):
        print('我是武侠人物')


if __name__ == "__main__":
    p = TianLong()
我是武侠人物

感兴趣直接点击图片获取>>

文章评论

子类继承父类的易错面试题文章写得不错,值得赞赏