python面向对象之继承相关知识

python面向对象之继承相关知识

1、继承

继承描述的是多个类之间的所属关系。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类

2、单继承(子类只继承一个父类)

子类在继承的时候,在定义类时,小括号中为父类的名字。父类的属性和方法都会被继承给子类
示例

# 任何类都可以是父类,因此语法与创建任何其他类相同
class Parent:
    def __init__(self,name):
        self.name = name

    def info(self):
        print(f"小明向{self.name}借了5元钱")

# 定义Child类,继承了Parent,则Child是子类,Parent是父类
class Child(Parent):
    # 子类可以继承父类所有的属性和方法,即使子类没有自己的属性和方法,也可以使用父类的
    pass

# 创建子类实例对象
c = Child("小红")

# 子类对象可以直接使用父类的方法
c.info()

运行结果:
请添加图片描述

3、多继承(子类继承多个父类)

子类会继承所有父类的属性和方法。
说明:如果多个父类中有同名的属性和方法,则默认使用第一个父类的属性和方法。多个父类中,不重名的属性和方法,不会有任何影响
示例

class Parent:
    def __init__(self,name):
        self.name = name

    def info(self):
        print(f"小明向{self.name}借了5元钱")

    def mood(self):
        print("借到钱了真开心")

class Bank:
    def __init__(self,name):
        self.bankname = name

    def info(self):
        print(f"小明向{self.bankname}申请了贷款")

    def hint(self):
        print("记得还钱")

# 多继承,继承了多个父类
class Child(Bank,Parent):
    pass

c = Child("中国银行")
c.info()
c.mood()
c.hint()

运行结果:
请添加图片描述

4、方法重写

如果父类方法的功能不能满足需求,可以在子类重写父类的同名属性或方法
说明:若子类和父类有同名的属性或方法,则默认使用子类的
示例

class Parent:
    def __init__(self):
        self.name = "小红"

    def info(self):
        print("小明向%s借了钱" % self.name)

class Child(Parent):
    def __init__(self):
        self.name = "小强"

    def info(self):
        print("小明没有向%s借钱" % self.name)

c = Child()
print(c.name)   # 子类和父类有同名的属性,则默认使用子类的
c.info()        # 子类和父类有同名的方法,则默认使用子类的

运行结果:
请添加图片描述

5、子类调用父类同名的属性和方法

示例

class Parent:
    def __init__(self):
        self.name = "小红"

    def info(self):
        print("小明向%s借了钱" % self.name)

class Child(Parent):
    def __init__(self):
        self.name = "小强"

    def info(self):
        print("小明没有还%s的钱" % self.name)

    def parent_info(self):
        # 调用父类方法的格式为:父类名.父类方法(self)
        Parent.__init__(self)    # 调用父类的__init__方法来修改self的属性值
        print("小明没有还%s的钱" % self.name)
        Parent.info(self)        # 调用父类的实例方法

# 实例化对象,自动执行子类的__init__方法
c = Child()
c.info()
c.parent_info()

运行结果:
请添加图片描述

6、多层继承

示例

class Parent:
    def __init__(self):
        self.name = "小红"
        print(f"小明向{self.name}借了钱")

    def mood(self):
        print("借到钱了真开心")

class Applic:
    def __init__(self):
        self.name = "借钱APP"
        print(f"小明向{self.name}借了钱")

    def hint(self):
        print("记得还钱")

# 多继承,继承了多个父类
class Child(Applic,Parent):
    def __init__(self):
        self.name = "小强"
        print(f"小明向{self.name}借了钱")

    def info(self):
        print("小明想借钱买游戏机")

# 多层继承
class NewChild(Child):
    pass

nc = NewChild()
nc.info()
nc.mood()
nc.hint()

运行结果:
请添加图片描述

7、super() 函数

super() 函数会使子类从其父继承所有方法和属性。通过使用 super() 函数,不必使用父元素的名称,它将自动从其父元素继承方法和属性
说明:使用 super() 函数,如果涉及到多继承,该函数只能调用第一个直接父类的构造方法
示例

class Parent:
    def __init__(self):
        self.name = "小红"
        self.money = "500"

    def info(self):
        print(f"小明向{self.name}借了{self.money}")

    def mood(self):
        print("借到钱了真开心")


class Child(Parent):
    def __init__(self):
        self.name = "小强"
        self.money = 700

    def info(self):
        self.__init__()          # 执行本类的__init__方法,做属性初始化
        print(f"小明向{self.name}借了{self.money}")

    def parent_info(self):
        super().__init__()    # 执行父类的__init__方法
        print("小明没有还%s的钱" % self.name)
        super().info()        # 执行父类的实例方法
        self.info()           # 执行本类的实例方法


c = Child()
c.info()
print("------------------------")
c.parent_info()

运行结果:
请添加图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值