python--继承

1.python继承的基本概念

  • 在程序中,继承描述的是多个类之间的所属关系。

  • 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。

  • 那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。

继承:描述的类与类之间所属关系。
基本语法:
class 类8(类A)
    pass
称为类 B 继承A
特点:B类的对象可以使用 A类的属性和方法
优点:代码复用。重复相同的代码不用多次书写
名词:
   类A:父类   基类
   类B:子类   派生类
# 定义是个 动物类 animal类
class Animal(object):
    # 在animal类书写play方法,输出快乐的玩耍
    def play(self):
        print('快乐的玩耍...')
        # 定义Dog类继承animal类


class Dog(Animal):
    pass


# 创建dog类对象,调用父类的方法
dog = Dog()
dog.play()

2.继承分类:

"""

单继承:如果一个类只有一个父类,把这种继承关系称为单继承

多继承:如果一个类有多个父类,把这种继承关系称为多继承

多层继承:c-->B-->A

"""

# 定义是个 动物类 animal类
class Animal(object):  # 对于Animal类和object类来说,单继承
    # 在animal类书写play方法,输出快乐的玩耍
    def play(self):
        print('快乐的玩耍...')
        # 定义Dog类继承animal类


# 定义Dog类继承animal类
class Dog(Animal):  # Dog-->Animal 也是单继承,Dog-->Animal-->object 这种继承关系称为多层继承
    def bark(self):
        print('汪汪叫......')


# 定义类XTQ类,继承Dog类
# 多层继承中,子类可以使用所有继承链中的类中的方法和属性
class XTQ(Dog):  # XTQ--->Dog 单继承,XTQ--->Dog-->Animal 类,多层继承
    pass


xtq = XTQ()
xtq.bark()  # 调用父类Dog中的方法
xtq.play()  # 调用爷爷类 animal类中的方法

3.子类重写父类的同名方法(掌握)

重写:子类定义和父类名字相同的方法
为什么重写?
解释:父类中的方法,不能满足子类对象的需求,所以要重写。
重写之后特点:子类对象调用子类自己的方法,不在调用的方法,父类对象调用父类自己的方法
# 1.定义Dog类,书写bark方法,输出 汪汪汪叫
class Dog(object):
    def bark(self):
        print('汪汪汪叫')


# 2.定义XTQ类,重写父类中的方法,输出 嗷嗷嗷叫
class XTQ(Dog):
    def bark(self):
        print('嗷嗷嗷叫')


# 创建Dog类对象
dog = Dog()
dog.bark()  # 父类自己
# 创建XTQ类对象
xtq = XTQ()
xtq.bark()  

4.子类调用父类中的同名方法

在代码中解释

# 1.定义Dog类,书写bark方法,输出 汪汪汪叫
class Dog(object):
    def bark(self):
        print('汪汪汪叫')


# 2.定义XTQ类,重写父类中的方法,输出 嗷嗷嗷叫
class XTQ(Dog):
    def bark(self):
        print('嗷嗷嗷叫')

    def see_host(self):
        """看见主人在之后,要汪汪叫,不能嗷嗷嗷叫"""
        print('看见主人了,', end='')
        # self.bark()
        # 想要在子类中调用父类的同名方法
        # 方法一:父类名.方法名(self,其他参数),通过实例对象.方法名()调用方法,不需要给self传递实参值,
        # python解释器会自动将对象作为实参值传递给self形参,如果是通过类名.方法()调用,python解释器就
        # 不会自动传递实参值,需要手动给self形参传递实参值
        Dog.bark(self)
        # 父类名(实参).方法名
        # 方法二: supper(类A,self).方法名(参数名),会调用当类A的父类中的方法
        super(XTQ, self).bark()  # 调用XTQ类父类中的bark方法
        # 方法三:是方法二的简写:super().方法名(参数)--等价于--super(当前类,self).方法名
        super().bark()


# 创建XTQ类对象
xtq = XTQ()
xtq.see_host()

5.继承中的init(掌握)

# 1.定义Dog类
class Dog(object):
    def __init__(self, name):
        # 添加属性
        self.age = 0
        self.name = name

    def __str__(self):
        return f'小狗名字{self.name},小狗年龄{self.age}'


# 2.定义XTQ类继承Dog类
class XTQ(Dog):
    # 子类重写了父类的__init__方法,默认不在调用父类的init方法,需要手动的调用父类的init方法
    def __init__(self, name, color):
        super().__init__(name)  #调用父类中的形参
        self.color = color   #调用自己独有的形参

    def __str__(self):
        return f'小狗名字{self.name},小狗年龄{self.age},该颜色为{self.color}'


# 3.创建XTQ类对象
xtq = XTQ('小黄', '红色')
print(xtq)

注意:1.如果子类重写了父类的init

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

最初的梦10

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

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

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

打赏作者

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

抵扣说明:

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

余额充值