python之面向对象(三)之类的派生、多继承

子类与父类:子类除了继承父类的所有方法与属性还可以进行派生与改写
派生:子类添加自己的方法与变量
方法的重写:子类继承到父类的方法不能满足子类的需求,子类可以重写从父类继承到的方法。有两种方式:1、完全重写,2、部分重写
1、完全重写: 完全重新将父类的方法进行的全新的定义/实现(根本就没有保留父类方法的原始功能)

class Father():
    @classmethod
    def class_fun(cls):
        pass
    @staticmethod
    def class_static():
        pass
    def __init__(self):
        pass
    def hobby(self):
        print("我会唱歌也会跳舞")
        pass
class Son(Father):
    def hobby(self):
        Father.hobby(self)
        super().hobby()
        print("我不会唱歌但是我会游泳和跳舞")
    pass
son = Son()
son.hobby()

通过super().方法名()实现,在原有的父类方法的基础上,增加方法内容。这是部分重写,一般部分重写偏多
而全部重写,将super().方法名()删除就好

多继承:一个子类可以继承多个父类的方法与参数,但是遇到两个父类的方法或者参数一致,根据优先原则,子类会继承相同参数或者方法下的写在最前面的父类的参数和方法

class Father():
    @classmethod
    def class_fun(cls):
        pass
    def __init__(self):
        pass
    def love(self):
        print("我是son的爸爸,我喜欢刷抖音")
class Mother():
    @classmethod
    def class_mother(cls):
        pass
    def __init__(self):
        pass
    def love(self):
        print("我是son的妈妈,我喜欢刷快手")
class Son(Father,Mother):
    pass
son = Son()
son.love()

结果如下:son继承的使father的love不是mother的love

我是son的爸爸,我喜欢刷抖音

Process finished with exit code 0

已经说过一个子类可以继承多个父类的方法和参数,那么子类的子类也可以继承父类的父类的参数和方法,进行多重继承
如:

class Father():
    @classmethod
    def class_fun(cls):
        pass
    def __init__(self):
        pass
    def love(self):
        print("我是son的爸爸,我喜欢刷抖音")
class Mother():
    @classmethod
    def class_mother(cls):
        pass
    def __init__(self):
        pass
    def love(self):
        print("我是son的妈妈,我喜欢刷快手")
class Son(Father,Mother):
    pass
son = Son()
son.love()
class Grandson(Son):
    pass
grandson = Grandson()
grandson.love()

输出结果:

D:/************************/面向对象之多继承.py 
我是son的爸爸,我喜欢刷抖音
我是son的爸爸,我喜欢刷抖音
Process finished with exit code 0

额外知识:isinstance(参数,某类型),用来判断参数是否属于某类型,如果属于有返回true否则返回false

n = isinstance(1,int)
m = isinstance(son,Mother)
o = isinstance(son,Grandson)
print(n,m,o)

结果:

True True False
Process finished with exit code 0

由此可以得出:子类对象的type属于父类的type,而父类的对象不属于子类的type。

补充:关于子类父类方法中的self,cls是一个绝对指向还是一个相对指向?二者都是一个相对的值,指向当前的类
代码如下:

class Father():
    def get_xxx(self):
        print(self)
class Son(Father):
    pass
class Grandson(Son):
    pass
father = Father()
father.get_xxx()
son = Son()
son.get_xxx()
grandson = Grandson()
grandson.get_xxx()

结果如下:

D:\*****************************************\面向对象之多继承2.py 
<__main__.Father object at 0x00000246A98AB610>
<__main__.Son object at 0x00000246A62CAA40>
<__main__.Grandson object at 0x00000246A62CAA70>
Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值