python--继承-多继承-多态

继承

父类无法继承子类
子类可以继承父类的所有

class A():# 父类
    def function(self):
        self.name = "小明"
        print(self.name)

class B(A):# 子类继承(父类)
    def function(self):
        # super()函数是继承当前父类function()方法可以添加新的变量,但是不能对父类方法内的变量做修改
        super().function()

class C(A):# 子类继承(父类)
    def function(self):
        # 对父类的function进行修改,此时无法通过super函数修改,只能通过重写方式进行修改
        self.name = "小红"# 重写父类name
        print(self.name)

b = B() # B子类实例化
b.function() #输出继承后的name(小明)

c = C() # C子类实例化
c.function()# 输出方法重写后的name(小红)

多继承

多继承时,如果父类中出现相同参数,python会遵守就近原则进行输出
实例如下:

class A:# A类
    def __init__(self):
        self.name = '小红' # 与B类中name存在同名
        self.age = 20 # 与B类中age存在同名

class B:# B类
    def __init__(self):
        self.name = '小明' # 与A类中name存在同名
        self.age = 18 # 与A类中age存在同名

    def sexs(self):
        self.sex = '男' # 不存在同名

# C类所继承的父类中的方法,如果存在同名(如:B和A内name与age存在同名),B类会覆盖A类的相同参数,B类优先级高于A类。
class C(B,A):# C继承B、A类。(B类在A类前方,因此出现同变量时,优先获取B类变量)
    def func(self):
        print(self.name)# 输出:小明
        print(self.age)# 输出:18
        print("我的名字叫%s,我的年龄%s,性别%s" % (self.name, self.age,self.sex))
s = C()
s.func()# 输出:我的名字叫小明,我的年龄18,性别男

多态

一、什么是多态:
1、多态一定是发生在子类和父类之间,并且子类重写了父类的方法
2、多态是不同的子类对象调用相同的父类,输出不同的结果
3、多态更为灵活,能够扩展,体现开闭原则

二、多态的定义:父类的同一种动作或行为

三、多态的步骤:
1:调用父类
2:重写子类
3:创建子类

实例1:

class A():# 父类
    def funcs(self):
        print("小明")

class B(A):# B继承A
    def funcs(self):# B类重写A类中的funcs方法
        print("小红")

class C(A):# B继承A
    def funcs(self):# C类重写A类中的funcs方法
        print("小蓝")

class D():
    def functions(self, run):# functions方法内传入run(run是自定义的参数)
        run.funcs() # run调用类的funcs方法
# D类进行实例化
d = D()
b = C()

# d实例化调用functions方法,run参数是对应类的实例,就会调用对应的funcs方法
d.functions(A())# 输出:小明
d.functions(b)# 输出:小红
d.functions(C())# 输出:小蓝

实例2:
isinstance函数,判断一个对象是否是已知类型,并且会考虑到继承关系。
为什么不用type,因为type不会考虑到继承关系。

class A():# 父类
    def funcs(self):
        print("小明")

class B(A):# B继承A
    def funcs(self):# B类重写A类中的funcs方法
        print("小红")

class C(A):# B继承A
    def funcs(self):# C类重写A类中的funcs方法
        print("小蓝")

class D():
    def functions(self, run):# functions方法内传入run(run是自定义的参数)
        run.funcs() # run调用类的funcs方法
# D类进行实例化
d = D()
b = B()
c = C()

# d实例化调用functions方法,run参数是对应类的实例,就会调用对应的funcs方法
d.functions(A())# 输出:小明
d.functions(B())# 输出:小红
d.functions(c)# 输出:小蓝
d.functions(C())# 输出:小蓝
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

z千鑫

在线乞讨,行行好吧!

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

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

打赏作者

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

抵扣说明:

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

余额充值