• 继承


    继承: 解决代码的重复性

    继承语法:

    1 class A:
    2     pass
    3 class B(A):    #父类名
    4     pass
    5 # B继承A,A是父类,B是子类
    6 # A是父类 基类 超类
    7 # B是子类 派生类
    # 需求:定义一个动物类,让猫跟够继承动物类,动物类中的方法有吃,喝,睡
    # 猫类:爬树
    # 狗类:看家
    # 子类可以使用父类重点的:方法,静态变量
     1 class Animal:   #动物
     2     def __init__(self,name):
     3         self.name = name
     4     def eat(self):    #
     5         print('%s is 吃'% self.name)
     6     def drink(self):    #
     7         print('%s is 喝' % self.name)
     8     def sleep(self):    #
     9         print('%s is 睡' % self.name)
    10 class Cat(Animal):    #猫类继承动物类
    11     def climb_tree(self):    #爬树
    12         print('%s is 爬树' % self.name)
    13 class Dog(Animal):    #狗类继承动物类
    14     def Housekeeping(self):    #看家
    15         print('%s is看家'%self.name)
    16 小花猫 = Cat('小花猫')    #实例化
    17     # 先开辟空间,空间里有一个类指针-->指向Cat
    18     # 调用init,对象在自己的空间中找init没找到,到Cat类中找init也没找到,
    19     # 找父类Animal中的init
    20 小花猫.eat()
    21 小花猫.sleep()
    22 小花猫.climb_tree()
    23 大黄狗 = Dog('大黄狗')
    24 大黄狗.Housekeeping()
    25 大黄狗.eat()
    26 大黄狗.sleep()
    27 # 结果:
    28 # 小花猫 is 吃
    29 # 小花猫 is 睡
    30 # 小花猫 is 爬树
    31 # 大黄狗 is看家
    32 # 大黄狗 is 吃
    33 # 大黄狗 is 睡
    #当子类和父类的方法重名的时候,我们只使用子类的方法,而不会去调用父类的方法了
     1 class Animal:   #动物
     2     def __init__(self,name):
     3         self.name = name
     4     def eat(self):    #
     5         print('%s is 吃'% self.name)
     6     def drink(self):    #
     7         print('%s is 喝' % self.name)
     8     def sleep(self):    #
     9         print('%s is 睡' % self.name)
    10 class Cat(Animal):    #猫类继承动物类
    11     def eat(self):    #子类跟父类从名
    12         print('%s is 吃鱼' % self.name)
    13 小白 = Cat('小白')
    14 小白.eat()
    15 # 结果:
    16 # 小白 is 吃鱼
    # 子类想要调用父类的方法的同时还想执行自己的同名方法
    # 猫和狗在调用eat的时候既调用自己的也调用父类的,
    # 在子类的方法中调用父类的方法 :父类名.方法名(self)
     1 class Animal:   #动物
     2     def __init__(self,name):
     3         self.name = name
     4     def eat(self):    #
     5         print('%s is 吃'% self.name)
     6     def drink(self):    #
     7         print('%s is 喝' % self.name)
     8     def sleep(self):    #
     9         print('%s is 睡' % self.name)
    10 class Cat(Animal):    #猫类继承动物类
    11     def eat(self):    #吃,猫中自己的方法
    12         print('猫吃鱼')
    13         Animal.eat(self)    #同名在子类调用父类中的方法
    14         print('猫吃鱼')
    15     def climb_tree(self):    #爬树
    16         print('%s is 爬树' % self.name)
    17 class Dog(Animal):    #狗类继承动物类
    18     def Housekeeping(self):    #看家
    19         print('%s is看家' % self.name)
    20     def eat(self):    #吃,狗中自己的方法
    21         Animal.eat(self)#同名在子类调用父类中的方法
    22         print('狗吃骨头')
    23 小猫 = Cat('小猫')
    24 小狗 = Dog('小狗')
    25 小猫.eat()
    26 小狗.eat()
    27 # 结果:
    28 # 小猫 is 吃
    29 # 猫吃鱼
    30 # 小狗 is 吃
    31 # 狗吃骨头
    # 继承语法 class 子类名(父类名):pass
    # 父类和子类方法的选择:
    # 子类的对象,如果去调用方法
    # 永远优先调用自己的
    # 如果自己有 用自己的
    # 自己没有 用父类的
    # 如果自己有 还想用父类的 : 直接在子类方法中调父类的方法 父类名.方法名(self)
    # 单继承
    # 调子类的 : 子类自己有的时候
    # 调父类的 : 子类自己没有的时候
    # 调子类和父类的 :子类父类都有,在子类中调用父类的
    单继承语法:
     2 class D:
     3     def func(self):
     4         print('in D')
     5 class C(D):pass
     6 class A(C):
     7     def func(self):
     8         print('in A')
     9 class B(A):pass
    10 B().func()    #==A().func
    11 # 结果:in A
    12 #A是B的父类,C是A的父类,D是C的父类
    # 多继承 有好几个爹
    # 有一些语言不支持多继承 java
    # python语言的特点 : 可以在面向对象中支持多继承
    # 一个类有多个父类,在调用父类方法的时候,按照继承顺序,先继承的就先寻找
    多继承语法:
    1 class B:
    2     def func(self):print('in B')
    3 class A:
    4      def func(self):print('in A')
    5 class C(B,A):pass    #多继承,继承了B跟A
    6 C().func()    #B().func
    7 # 结果:in B
    # 补充:
    # object类 类祖宗
    # 所有在python3当中的类都是继承object类的
    # object中有init
    # 所有的类都默认的继承object

    # class A(object):
    # pass
    # a = A()
    # 开空间
    # 调用init
  • 相关阅读:
    2.Magicodes.NET框架之路——策略管理
    1.Magicodes.NET框架之路——起航
    为什么LINQ to XML的性能要优于XmlDocument?
    SharePoint如何配置Ipad跳转等问题
    写给自己
    ERP,SCM,CRM,BRP,OMS,WMS 企业管理的6大核心系统
    spring 发送邮件问题
    spring各种邮件发送
    css background-position结合disaply:inline-block使用
    .Net 两大利器Newtonsoft.NET和Dapper
  • 原文地址:https://www.cnblogs.com/yjtxin/p/12374642.html
Copyright © 2020-2023  润新知