栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-类的继承

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-类的继承

Python-类的继承)
  • 继承的含义
  • 继承语法
    • 继承中的特点
    • 子类中调用父类__init__
    • 子类方法重写
  • 多继承
  • 多态
    • 多态的要素
    • 多态的举例

继承的含义
  • 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
  • 通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
  • 子类会继承父类的属性和方法。
继承语法
  • object类是所有类的父类,因此所有类都有object类的属性和方法。
  • 不写默认继承于object。
class 派生类名(基类名1,基类名2...)
	...
继承中的特点
  • 如果在子类中需要有__init__方法,同时需要父类的初始化方法(构造方法)__init__方法,就需要显式的调用父类初始化方法。
  • 如果子类中没有__init__方法,则会使用父类的__init__方法。
  • 当子类使用某个属性或方法时,先在子类中寻找,如果没有,再到父类中逐个寻找。只要在子类中找到名字,不管参数一样不一样,都不再去父类中找。
子类中调用父类__init__
  • 当子类中重写了__init__函数,且需要使用父类的__init__函数实现对父类的初始化。
  • 子类中使用父类中其它的函数,也可以利用类似的方法。
# 如果多个父类,就写多个
class 子类(父类)
	def __init__(self,参数1,参数2,...):
		super().__init__(参数1,参数2,....)或者
		super(子类,self).__init__(参数1,参数2,....)或者
		父类名称.__init__(self,参数1,参数2,...)
class Parent:
    parent_attr = 100
    def __init__(self):
        print("父类__init__")
    def parent_method(self):
        print("-----parent_method---")
class Child(Parent):  # 定义子类
    def __init__(self):
        print("子类__init__")
        super(Child, self).__init__()
    def child_method(self):
        print("-----child_method---")

c = Child()  # 实例化子类
c.child_method()  # 调用子类的方法
c.parent_method()  # 调用父类方法
c.parent_attr = 10  # 再次调用父类的方法 - 获取属性值

result:
子类__init__
父类__init__
-----child_method---
-----parent_method---
子类方法重写
  • 如果父类方法的功能不能满足你的需求,可以在子类重写父类的方法。
class Parent:
    parent_attr = 100
    def __init__(self):
        print("父类__init__")
    def test(self):
        print("-----parent test---")
class Child(Parent):  # 定义子类
    def __init__(self):
        print("子类__init__")
        super(Child, self).__init__()
    def test(self):
        print("-----child test---")

c = Child()     # 实例化子类
c.test()        # 调用子类的方法
c.parent_attr = 10  # 再次调用父类的方法 - 获取属性值
print(c.parent_attr, Parent.parent_attr)

result:
子类__init__
父类__init__
-----child test---
10 100
多继承
  • python允许多继承。
  • 如果多个父类中有相同名称的方法,搜索顺序可以通过对象.__mro__搜索。
  • 新式类(继承自object)查找顺序为从左到右,广度优先。
class P1():
    def func(self):
        print("P1 func")
class P2():
    def func(self):
        print("P2 func")
class C1(P1,P2):
    def func(self):
        print("C1 func")
class C2(P1,P2):
    def func(self):
        print("C2 func")
class D(C1,C2):
    pass

d1 = D()
d1.func()
print(D.__mro__)

d1 = D()
d1.func()
print(D.__mro__)

result:
C1 func
(, , , , , )
多态

多态是针对于方法而言的,举个例子,小狗叫是汪汪,小猫叫是喵喵,狼叫是嗷嗷,同样是叫,每种动物的操作却不一样。这就是一种多态。

  • 多态指同一个方法,传入不同的对象(子类对象)参数时,可以有不同的表现。
多态的要素
  • 继承:要有子类继承父类。
  • 重写:子类要对父类的相关方法进行重写。
    如果不重写的话,同一个方法都来自父类,都执行的是同样的代码,不会有不同表现。
多态的举例
# 子类中对父类的shout进行了重写。
# 在使用同样的方法,传入不同的对象时,实现了不同的操作。
class Animal:
    def shout(self):
        print("动物叫声:")

class Dog(Animal):
    def shout(self):
        Animal.shout(self)
        print("小狗汪汪,很可爱")

class Wolf(Animal):
    def shout(self):
        super(Wolf, self).shout()
        print("饿狼嗷嗷,很可怕")

def show(obj):
    obj.shout()

d1 = Dog()
w1 = Wolf()
show(d1)
show(w1)

result:
动物叫声:
小狗汪汪,很可爱
动物叫声:
饿狼嗷嗷,很可怕
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号