面向对象的三大特性: 继承

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

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

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

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

p1 = Person('alex','laddyboy',1000)

class Animal:
    breath = '呼吸'

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

    def eat(self):
        print(self)
        print('动物都需要进食....')


class Person(Animal):  # 括号里面的 父类,基类,超类   括号外面的 子类,派生类.
    pass

class Cat:
    pass

class Dog:
    pass

p1 = Person('alex', 'laddyboy', 1000)
print(p1.__dict__)

# 初识继承:


  # 子类以及子类实例化的对象 可以访问父类的任何方法或变量.


# 类名可以访问父类所有内容


  # print(Person.breath)
  # Person.eat(111)


# 子类实例化的对象也可以访问父类所有内容

  # print(p1.breath)
  # print(p1)
  # p1.eat()

#  写三个类: 狗,猫,鸡, 每个类中都有 吃 喝  自己的方法  最后定义一个Animal类,

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='绿翅膀'
        '''
        # Animal.__init__(self, name, sex, age)
        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('金蝉')

# 继承的进阶
# 继承: 单继承,多继承.

# 类: 经典类, 新式类
# 新式类: 凡是继承object类都是新式类.
# python3x 所有的类都是新式类,因为python3x中的类都默认继承object.
# class A:
# pass
# 经典类: 不继承object类都是经典类
#python2x:(既有新式类,又有经典类) 所有的类默认都不继承object类,所有的类默认都是经典类.你可以让其继承object.

# 单继承: 新式类,经典类查询顺序一样.
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()

# 多继承:
# 新式类: 遵循广度优先.
# 经典类: 遵循深度优先.

# 多继承的新式类
广度优先 : 一条路走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路.如果不能,则走到终点.
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()


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):
    def func(self):
        print('IN E')

class F(D,E):
    pass
    # def func(self):
    #     print('IN F')

f1 = F()
f1.func()

print(F.mro())  # 查询类的继承顺序

# 多继承的经典类 深度优先 : 一条路走到底.
class A:
    pass
    # 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()
简单总结:
继承的优点:
1,节省代码.
2,规范代码.
初识继承:
只执行本类的方法
只执行父类的方法.
既执行本类又执行父类的方法
父类名.方法名(参数)
super().方法名(参数(self自动传值))

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

单继承;
新式类经典类一样.
多继承:
新式类:广度优先 类名.mro() 新式类.
经典类:深度优先.

猜你喜欢

转载自www.cnblogs.com/skydragon/p/11674477.html