Python教程

Python继承

本文主要是介绍Python继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# _*_ coding:utf-8 _*_
# Author: 林楠
# edit time: 2022/4/24 16:44
# name: 继承.py
# Product: PyCharm

# 继承
# 继承是一种类间关系,描述一个类从另一个类获取成员信息的类间关系
# 父类提供成员信息,子类获取成员信息

"""
定义格式:
    class 类名(父类名):
    ____pass


"""
# 演示继承

'''
class Animal:
    type = "动物"
    """父类:动物类"""
    def __init__(self):
        self.name = None
        self.age = None
    def show(self):
        print("小动物,我叫%s" % self.name)

class Cat(Animal):
    """子类:猫类"""
    pass

c = Cat()
c.name = "毛毛"
print(c.name)
c.show()
print(Animal.type)
'''


# 继承作用
"""
继承父类的成员
    变量
    方法
    ### 注意:子类可以添加父类没有的成员,父类私有成员不可被继承
"""

'''class Animal:
    type = "动物"
    """父类:动物类"""
    def __init__(self):
        self.name = None
        self.age = None
    def show(self):
        print("小动物,我叫%s" % self.name)

class Cat(Animal):
    """子类:猫类"""
    def climb(self):
        print("猫爬树")  #子类添加成员

c = Cat()
c.name = "毛毛"
print(c.name)
c.show()
print(Animal.type)
c.climb()
c.__age
'''


# 演示继承关系图
'''
class Animal:
    def show1(self):
        pass

class Cat(Animal):
    def show2(self):
        pass

class PersianCat(Cat):
    def show3(self):
        pass

print(Animal.__mro__)
# (<class '__main__.Animal'>, <class 'object'>)
print(Cat.__mro__)
# (<class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)
print(PersianCat.__mro__)
# (<class '__main__.PersianCat'>, <class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)

ps = PersianCat
'''


### object类是所有类的父类
##   class 类名(object):
##   ____pass
#使用类名.__mro__查看继承关系链


# 重写:
# 在子类中科院定义与父类相同名称的方法,此时子类的方法对父类的方法构成了重写。
# 如果子类重写了父类的方法,使用子类对象调用被重写的方法时,执行子类中重写后的方法

# 演示重写
'''
class Animal(object):
    def eat(self):
        print("动物吃东西")

class Cat(Animal):
    def eat(self):
        print("猫吃鱼")
    # pass
    def __str__(self):
        return "喵星人"
    
cat1 = Cat()
cat1.eat()
print(cat1)
'''

# 演示重写关系中调用父类被覆盖的方法
"""
调用格式一:父类名.方法名(对象)
调用格式二:super(本类名,对象).方法名()
调用格式三:super().方法名()-----推荐
"""

'''
class Animal:
    def __init__(self):
        print("动物被创建")
    def eat(self):
        print("动物吃东西")

class Cat(Animal):
    def __init__(self):
        print("猫被创建")
        super().__init__()
    def eat(self):
        print("猫吃鱼")
        # 调用格式一:父类名.方法名(对象)
        Animal.eat(self)
        # 调用格式二:super(本类名,对象).方法名()
        super(Cat,self).eat()
        # 调用格式三:super().方法名()-----推荐
        super().eat()

    def __str__(self):
        s = super().__str__()
        print("---------")
        print(s)
        print("----------")
        return "喵星人"

cat1 = Cat()
cat1.eat()
'''


# 多继承

"""
class 类名(父类名1,父类名2,……)
____pass
"""

'''
class Father:
    def sing(self):
        print("擅长唱歌")
    def dance(self):
        print("跳舞难看")
class Mother:
    def sing(self):
        print("唱歌难听")
    def dance(self):
        print("擅长跳舞")

class Child(Father,Mother):
    def sing(self):
        print("儿子不会唱歌")
        Father.sing(self)
        Mother.sing(self)
        super().sing()

c = Child()
c.sing()
c.dance()

# 儿子不会唱歌
# 擅长唱歌
# 唱歌难听
# 擅长唱歌
# 跳舞难看

print(Child.__mro__)
# (<class '__main__.Child'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class 'object'>)
'''


#  多态
# 一个对象具有多种形态,在不同的使用环境中以不同的形态展示其功能,称该对象具有多态特征
# 多态发生在继承关系的基础之上
'''
class Teacher:
    def teach(self):
        print("教授知识")

class Driver:
    def drive(self):
        print("开车")

class Man(Teacher,Driver):
    def teach(self):
        print("教授python知识")
    def drive(self):
        print("开小轿车")

class Demo:
    def play(self,driver):
        driver.drive()

    def study(self,teacher):
        teacher.teach()

# 方案一:创建司机对象
d = Driver()
# 方案二:创建了一个具有司机特征的对象
man = Man()
demo = Demo()

demo.play(man)
demo.study(man)

# 输出:
# 开小轿车
# 教授python知识
'''

# 演示鸭子类型
##  对象在语法层面满足调用关系,实际不具有对应的对象形态,称该对象此时具备鸭子类型

class Teacher:
    def teach(self):
        print("教知识")

class Man(Teacher):
    def teach(self):
        print("教授python知识")

class GamePlayer:
    def teach(self):
        print("教玩游戏")

class Demo:
    def dothing(self,teacher):
        # 来一个老师教我
        teacher.teach()

d = Demo()
man = Man()
d.dothing(man)  # # 输出:教授python知识

player = GamePlayer()
d.dothing(player)  # 输出:教玩游戏


这篇关于Python继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!