9月18日学习内容整理:类和对象的继承

补充:

1、一个类中不可以有相同的动态属性名和静态属性名和对象属性名

2、面向对象三大特性:封装,继承,多态

一、继承

 1、和组合的区别:组合是表现的是什么有什么的关系,继承表示的是  什么是什么  的关系,例如人是动物,桌子是家具

 2、概念

(1)父类,超类,基类:说的是大范围的类,也就是被继承的

    子类,派生类,说的是小范围的类,也就是继承的

(2)先抽象再继承:具体的实例——>小范围的类——>大范围的类,从左到右是抽象,从右到左是继承

(3)单继承:只继承一个父类  子类名(父类名)

    多继承(实际中不应该用到很多的多继承):继承多个父类     子类名(父类名1,父类名2,.......)

(4)派生属性:除父类有的对象属性外,子类自己独有的对象属性称为派生属性

    派生方法:子类的方法(函数)

3、怎么用

class    子类名(父类名):这样就是子类继承了父类

4、super()的用法

(1)应用场景:当子类的方法名(函数名)和父类的方法名重合时,使用super就可以在子类中调用父类的方法

(2)在定义类内部:这里要注意子类方法下写super执行完父类的方法后子类方法仍要执行直到结束

1) 函数定义下面写  super().  方法名(需要参数就写上参数)(也就是函数名)

2)另一种写法:super(子类名,self). 方法名(需要参数就写上参数)

(3)在定义类外部:直接执行父类的相同函数名,不会再执行子类的方法

super(子类名,子类对象名). 方法名(需要参数就写上参数)

5、注意

(1)当父类和子类的方法重名时,要优先选用子类的方法

(2)当继承多个父类时,并且多个父类也有相同的方法名,子类运用super方法时会先找第一个父类,有就用第一个父类的方法,并且不会再往后找,若第一个父类没有

    就找第二个父类,以此类推,总的原则就是只会用找到的第一个父类方法

(3)子类可以继承父类的所有方法和属性,但首先是找自己的,自己没有才去找父类的

(4)谁调用谁就是self

 

 

 

举例:

 

class A:
    def hahaha(self):
        print('A')

class B(A):
    def hahaha(self):
        # super(B,self).hahaha()     #在内部用的第一种写法
        super().hahaha()             #在内部用的第二种写法         
        print('B')                   #这一句也会被执行

b = B()
b.hahaha()
# super(B,b).hahaha()          #在外部用
class A:
    def get(self):
        self.say()     #还是会先找自己的,所以输出的是BBBBB
    def say(self):
        print('AAAAA')
class B(A):
    def say(self):
        print('BBBBB')
b = B()
b.get()

 

class Chac:
    def __init__(self,name,aggr,blood):
        self.name=name
        self.aggr=aggr
        self.blood=blood
class Dog(Chac):
    def __init__(self,name,aggr,blood,pin):
        super().__init__(name,aggr,blood)     #先执行父类的
        self.pin=pin                                         #再继续执行   派生属性
    def attack(self,person):
        print('sss')
        person.blood -= self.aggr
class Person(Chac):
    def __init__(self,name,aggr,blood,qian):
        super().__init__(name,aggr,blood)
        self.qian=qian
    def bite(self,dog):
        print('aaa')
        dog.blood -= self.aggr
gou=Dog('alex',12,23,'erha')
ren=Person('egon',23,34,20000)

 

posted @ 2017-09-18 14:23  九二零  阅读(102)  评论(0编辑  收藏  举报