zoukankan      html  css  js  c++  java
  • day26 单继承

    继承是创建新类的一种方式,目的就为了减少代码。表达了子类是父类的关系,比如狗是动物,教授是老师
    一个类可以多个类继承,所有语言都是这样的
    一个类可以继承多个父类 ,只有python支持多继承
    子类可以找到父类,但是父类不知道自己几个子类的,毕竟你创建的时候才不会知道会有几个子类吧
    子类只会和父类联系,彼此之间不联系
    1 class A:pass                 # 父类,基类,超类
    2 class B:pass                 # 父类,基类,超类
    3 class A_son    (A,B):pass        # 子类
    4 class AB_son(A,B):pass        # 子类
    5 print(A_son.__bases__)         # 查看父类
    6     # (<class '__main__.A'>, <class '__main__.B'>)
    7 print(A.__bases__)             # 没有父类的类默认属于 "object" 祖宗类
    8     # (<class 'object'>,)
     1 # 狗类    看门
     2 # 鸟类    下蛋
     3 # 动物,吃,喝,跑
     4 #
     5 
     6 class Animal:
     7     def __init__(self):
     8         print("执行 Animal__init__")
     9         self.func()
    10     def eat(self):
    11         print("it's can eat")
    12     def run(self):
    13         print("it's can run")
    14     def dirnk(self):
    15         print("it's can drink")
    16     def func(self):
    17         print("Animal__init__.func")
    18 class Dog(Animal):
    19     def guard(self):
    20         print("it's can guard")
    21     def func(self):
    22         print("Dog.func")
    23 class brid(Animal):
    24     def egg(self):
    25         print("it's can egg")


    人狗实例
     1 class Animal:
     2     def __init__(self,name,aggr,hp):
     3         self.name = name
     4         self.aggr = aggr
     5         self.hp = hp
     6     def eat(self):
     7         print("%s吃药回血" %self.name)
     8         self.hp += 100
     9 class Dog(Animal):
    10     def __init__(self,name,aggr,hp,kind):
    11         Animal.__init__(self,name,aggr,hp)     # 调用父类,要带上全部的参数
    12         self.kind = kind                      # 派生属性
    13     def bite(self, person):
    14         person.hp -= self.aggr
    15     def eat(self):                             # 狗吃药回血还能长牙
    16         Animal.eat(self)                      # 吃药基础技能继续调用父类
    17         self.teech  = 2                         # 长牙了
    18 
    19 class Person(Animal):
    20     def __init__(self,name,aggr,hp,sex,money):
    21         Animal.__init__(self,name,aggr,hp)    # 调用父类
    22         self.sex = sex                        # 派生属性
    23         self.money = money                    # 派生属性
    24     def attact(self, dog):
    25         dog.hp -= self.aggr
    26 suyang = Dog("苏阳",1,1,"吉娃娃")
    27 yangtuo = Person("羊驼",100,100,"天才",10000)
    28 suyang.eat()          # 苏阳吃药回血
    29 print(suyang.hp)      # 101
    30 yangtuo.attact(suyang)     
    31 print(suyang.hp)      # 1
    32 suyang.eat()          # 苏阳吃药回血
    33 print(suyang.teech)    # 2   # 狗独有的方法长牙 

    总结:
    父类中没有的方法子类有,叫做派生方法
    父类中没有的方法子属性,叫做派生属性
    只要子类的对象调用,子类有一定用子类,子类没有才用父类,如果都没有,报错
    如果还想用父类的,直接单独父类调用吧,
    单独调用父类方法,记得自己传self参数
    super().func 不需要自己传self了也可以实现 fulei.func的功能


     1 lass Animal:
     2     def __init__(self,name,aggr,hp):
     3         self.name = name
     4         self.aggr = aggr
     5         self.hp = hp
     6     def eat(self):
     7         print("%s吃药回血" %self.name)
     8         self.hp += 100
     9 class Dog(Animal):
    10     def __init__(self,name,aggr,hp,kind):
    11         super().__init__(name,aggr,hp)        # 另一种方法调用父类,更加简单一些,省略了类名,对象名
    12                                               # 只在新式类中才有,python3中所有的类都是新式类
    13         self.kind = kind                      # 派生属性
    14 
    15 suyang = Dog("苏阳",1,1,"吉娃娃")
    16 print(suyang.name)
    17 super(Dog,suyang).eat()                        # super可以在外面调用父类的方法,不仅仅局限于子类中调用父类
  • 相关阅读:
    java字符串实现正序和倒序输出
    暑假前挑战赛1—— A,B题解
    深搜
    poj 1200 Crazy Search
    poj 1840 Eqs (hash)
    Choose the best route
    一个人的旅行
    畅通工程续
    最短路基础算法
    完全背包问题
  • 原文地址:https://www.cnblogs.com/shijieli/p/9915499.html
Copyright © 2011-2022 走看看