• 五、类的继承
    • 1、定义类的继承
    • 2、调用父类的方法
    • 3、父类方法的重写
    • 3、子类的类型判断

    五、类的继承

    1、定义类的继承

    首先我们来看下类的继承的基本语法:

    1. class ClassName(BaseClassName):
    2. <statement-1>
    3. .
    4. .
    5. .
    6. <statement-N>

    在定义类的时候,可以在括号里写继承的类,一开始也提到过,如果不用继承类的时候,也要写继承 object 类,因为在 Python 中 object 类是一切类的父类。

    当然上面的是单继承,Python 也是支持多继承的,具体的语法如下:

    1. class ClassName(Base1,Base2,Base3):
    2. <statement-1>
    3. .
    4. .
    5. .
    6. <statement-N>

    多继承有一点需要注意的:若是父类中有相同的方法名,而在子类使用时未指定,python 在圆括号中父类的顺序,从左至右搜索 , 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

    那么继承的子类可以干什么呢?

    继承的子类的好处:

    • 会继承父类的属性和方法
    • 可以自己定义,覆盖父类的属性和方法

    2、调用父类的方法

    一个类继承了父类后,可以直接调用父类的方法的,比如下面的例子,UserInfo2 继承自父类 UserInfo ,可以直接调用父类的 get_account 方法。

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. class UserInfo(object):
    4. lv = 5
    5. def __init__(self, name, age, account):
    6. self.name = name
    7. self._age = age
    8. self.__account = account
    9. def get_account(self):
    10. return self.__account
    11. class UserInfo2(UserInfo):
    12. pass
    13. if __name__ == '__main__':
    14. userInfo2 = UserInfo2('两点水', 23, 347073565);
    15. print(userInfo2.get_account())

    3、父类方法的重写

    当然,也可以重写父类的方法。

    示例:

    1. #!/usr/bin/env python3
    2. # -*- coding: UTF-8 -*-
    3. class UserInfo(object):
    4. lv = 5
    5. def __init__(self, name, age, account):
    6. self.name = name
    7. self._age = age
    8. self.__account = account
    9. def get_account(self):
    10. return self.__account
    11. @classmethod
    12. def get_name(cls):
    13. return cls.lv
    14. @property
    15. def get_age(self):
    16. return self._age
    17. class UserInfo2(UserInfo):
    18. def __init__(self, name, age, account, sex):
    19. super(UserInfo2, self).__init__(name, age, account)
    20. self.sex = sex;
    21. if __name__ == '__main__':
    22. userInfo2 = UserInfo2('两点水', 23, 347073565, '男');
    23. # 打印所有属性
    24. print(dir(userInfo2))
    25. # 打印构造函数中的属性
    26. print(userInfo2.__dict__)
    27. print(UserInfo2.get_name())

    最后打印的结果:

    Python 类的继承

    这里就是重写了父类的构造函数。

    3、子类的类型判断

    对于 class 的继承关系来说,有些时候我们需要判断 class 的类型,该怎么办呢?

    可以使用 isinstance() 函数,

    一个例子就能看懂 isinstance() 函数的用法了。

    1. #!/usr/bin/env python3
    2. # -*- coding: UTF-8 -*-
    3. class User1(object):
    4. pass
    5. class User2(User1):
    6. pass
    7. class User3(User2):
    8. pass
    9. if __name__ == '__main__':
    10. user1 = User1()
    11. user2 = User2()
    12. user3 = User3()
    13. # isinstance()就可以告诉我们,一个对象是否是某种类型
    14. print(isinstance(user3, User2))
    15. print(isinstance(user3, User1))
    16. print(isinstance(user3, User3))
    17. # 基本类型也可以用isinstance()判断
    18. print(isinstance('两点水', str))
    19. print(isinstance(347073565, int))
    20. print(isinstance(347073565, str))

    输出的结果如下:

    1. True
    2. True
    3. True
    4. True
    5. True
    6. False

    可以看到 isinstance() 不仅可以告诉我们,一个对象是否是某种类型,也可以用于基本类型的判断。