Python3之面向对象的三大特性--继承(2)

本文介绍了Python3中的继承和派生概念,包括单继承、多继承及其语法示例。通过实例展示了继承如何实现代码共享,以及如何查看类的基类。同时提到了多继承可能导致的方法冲突问题,建议谨慎使用。最后,提供了检查类是否继承某个类的语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#继承和派生
什么是继承派生呢?
继承:从已有类中派生出新的类,具有原类的属性和行为,并且可以添加新的行为
派生:从已有类中派生出新的类,在新类的基础上添加新的属性和行为

通俗的讲:
小明他⑧有一套房和一辆车,百年之后小明继承了他⑧的房和车,这就是继承,派生就是在继承的房和成进行一定的改装,或装修。

为什么使用继承或派生呢?
继承的目的就是延续旧的类的功能
派生的目的就是在旧类的基础上改变原有的功能
使用继承或派生可以节省我们大量的写重复代码的时间,比如自行车和电动车,肯定先有的自行车,后有的电动车,自行车有的功能电动车基本都有这就是继承,然后在此基础之上改装使用电,这就是派生了

名词解释:
基类/超类/父类是继承的原类(自行车)
派生类/子类是(电动车)
继承分为单继承个多继承

单继承:只继承一个基类
语法:

class 类名(基类名):
	语句块

举个小栗子:

class Human:
    def say(self, what):  # 说话行为
        print('说',what)

    def walk(self, distance):  # 走路行为
        print('走了', distance, '公里')

class Student(Human):  # 继承了Human类,有说话行为和走路行为
    def study(self, subject):  # 改装,添加学习的行为,Student类就可以说是由Human派生出来的类
        print('正在学', subject)

class Teacher(Student):  # 继承了Student类,有说话行为、走路行为、学习行为
    def teach(self, subject):  # 改装,再添加一个教书的行为
        print('正在教', subject)

h1 = Human()  # 创建一个Human实例对象
h1.say('今天天气真好')
h1.walk(5)

s1 = Student()  # 调用一个Student实例对象
s1.walk(4)
print('走的有点了类,先休息一下')
s1.study('python')

t1 = Teacher()  # 创建一个Teacher实例对象
t1.walk(4)
print('走的有点了类,先休息一下')
t1.teach('python')

注释写的很明白,就不做详细解释了

那么继承派生的作用是什么?

  1. 可以将一些共有的功能加在基类中,实现代码的共享
  2. 在不改变基类的基础上改变原有的功能

提出一个问题:Human继承谁呢?
在python3中任何类都直接或间接的继承object类
object是一切类的超类
Human继承的object,可以这么写

class Human(object):
	pass

多继承:继承两个或两个以上基类
语法:

class 类名(基类1,基类2...):
	pass

说明:
一个子类同时继承多个父类,父类的方法可以同时被继承下来,如果两个父类中有同名的方法,而在子类中又没有覆盖此方法时,调用先继承的类的方法。

举个栗子:

class A:
    def m(self):
        print('A.m被调用')

class B:
    def m(self):
        print('B.m被调用')

class AB(A, B):  # 对于m方法来说,先继承A,后继承B
    pass

ab = AB()
ab.m()    # 调用先继承的里边的方法

运行结果就是:

A.m被调用

这也是多继承的一个缺陷,要谨慎使用多继承

如何查看类的基类?

__bases__        # 记录类的基类

语法:

print(类名.__bases__)

如上述例子我们分别查看一下Teacher、Student、Human的基类是谁!

print(Teacher.__bases__)
print(Student.__bases__)
print(Human.__bases__)

打印结果:

(<class '__main__.Student'>,)
(<class '__main__.Human'>,)
(<class 'object'>,)

####判断是否是谁的派生类,或是否是继承了 某类
语法格式:

issubclass(cls,class_or_tuple)

是则返回True,否则返回False
举个简单的栗子:

>>> class A:
	pass

>>> class B(A):
	pass

>>> class C(B):
	pass

>>> issubclass(B,A)
True
>>> issubclass(C,A)
True
>>> issubclass(C,B)
True
>>> issubclass(C,(A,B))
True

本节完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒不可闫M先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值