类的继承

继承的优点:
1,节省代码.
2,规范代码.
初识继承:

#执行方法的时候先在自己的类中找,没有再去父类中找
只执行本类的方法 #在本类中要有执行的方法
只执行父类的方法. #本类中不写这个方法,自动去找父类中的方法
既执行本类又执行父类的方法
  1,父类名.方法名(参数)
  2,super().方法名(参数(self自动传值,不用写self))

举例:

class Animal:

    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

    def eat(self,a1):
        print('%s吃%s' % (self.name,a1))

    def drink(self):
        print('%s喝东西' % (self.name))


class Cat(Animal):

    def miaow(self):
        print('喵喵叫')
    # def eat(self):  # 只执行自己类中的方法
    #     print(666)

class Brid(Animal):

    def __init__(self, name,sex,age,wing): # self b1对象 name '鹦鹉',sex '公',age 20,  wing '绿翅膀'
        '''
        self=b1对象
        name='鹦鹉'
        sex='公'
        age= 20,
        wing='绿翅膀'
        '''
    #1,  Animal.__init__(self, name, sex, age)
    #2,  super().__init__(name,sex,age)  #  相当于super(Brid,self).__init__(name,sex,age)
        self.wing = wing
    def bark (self):
        print('嗷嗷叫')

    def eat(self,argv):
        super().eat(argv)
        print('鸟吃虫子...')

class Chook(Animal):
    def crow(self):
        print('大爷laiwanya')
cat1 = Cat('tom','公', 3)
cat1.eat()
# 只执行父类的方法:子类中不要定义与父类同名的方法
# 只执行子类的方法:在子类创建这个方法.
# 既要执行子类的方法,又要执行父类的方法?
# 有两种解决方法.
    # 1,Animal.__init__(self, name, sex, age)
    # 1,super().__init__(name,sex,age)
# cat1 = Cat('tom','公', 3,)

b1 = Brid('鹦鹉','公',20,'绿翅膀')
# print(b1.__dict__)
b1.eat('金蝉')

 

 

单继承,多继承.
类:新式类,经典类.

单继承;
新式类经典类一样.

class A:
    pass
    # def func(self):
    #     print('IN A')

class B(A):
    pass
    # def func(self):
    #     print('IN B')

class C(B):
    pass
    # def func(self):
    #     print('IN C')

c1 = C()
c1.func()

  


多继承:       #python3中没有经典类,都是新式类,自动继承object类.
新式类:广度优先     类名.mro()#查询类的继承顺序
经典类:深度优先.     #python2中才有经典类,继承object类之后就是新式类

class A:
    def func(self):
        print('IN A')
class B(A):
    pass
    # def func(self):
    #     print('IN B')
class C(A):
    pass
    # def func(self):
    #     print('IN C')
class D(B):
    pass
    # def func(self):
    #     print('IN D')
class E(C):
    pass
    # def func(self):
    #     print('IN E')
class F(D,E):
    pass
    # def func(self):
    #     print('IN F')
f1 = F()
f1.func()
print(F.mro())  # 查询类的继承顺序

#F,D,B,E,C,A
#先写出所有路的继承顺序,D,B,A    E,C,A在写出继承的顺序D,E
#以每一条路的第一位为头,后面的为尾
#判断第一条路的头在不在后面的尾里面
#如果在
#看另一条路的头在不在
#如果不在
#删除每一条路的这个字母
#添加到另一个列表中
#依次循环
#得到的那个新列表前面加上最后的那个子类名
#就是继承的顺序

  

 

  

posted on 2018-07-25 19:54  你们都厉害  阅读(140)  评论(0编辑  收藏  举报