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

继承:

class  Animal:

    breath = ‘呼吸’

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

        self.name = name

        self.sex = sex

        self.age = age

    def eat(self):

       print(“动物都需要进食”)

class Person(Animal):  #括号里面的是父类,括号外面的是子类

   pass

class Cat():

   pass

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

print(p1.__dict__)

#初识继承:子类以及子类实例化的对象,可以访问父类的任何方法或变量。

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

print(Person.breath)   #用类名去访问父类的变量

Person.eat(111)              #用类名去访问父类的方法

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

print(p1.breath)

p1.eat()

#查询顺序

先从本类中找,如果找不到,就通过指针去父类中找。

 

#只执行父类的方法:子类中不要定义与父类同名的方法

只执行子类的方法:在子类创建这个方法

既要执行子类的方法,又要执行父类的方法,有两种解决方式

1.

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 eat(self):

       print('%s喝东西' % *(self.name))

class Bird(Animal):

    def __init__(self,name,sex,age,wing):#self接收的是b1对象,nama接收的是鹦鹉,sex接收的是公,age接收的是20,wing接                                                                      收的是绿翅膀

                                                                “相当于在函数体定义了这几个变量,name:鹦鹉,sex:公,age:20,wing 

      Animal.__init__(self,name,sex,age)       #类名调用方法需要self;借助Bird的init函数,                                                                                                                                   将 name,sex,age等参数传递给了父类的name,sex,age等参 数,name:鹦鹉,                                                                         sex:公,age:20,自动执行父类的init函数,给b1这个对象封装 了3个属性,也                                                                           以 用下列代码代替super().__init__(name,sex,age)

        self.wing = wing        在自己本类定义了wing属性

    def bark(self):

        print(‘嗷嗷叫’)

     def eat(self,argv):

        super().eat(argv)

        print("鸟吃虫子...”)

 

b1 = Bird(‘鹦鹉’,‘公’,20,‘绿翅膀’)

#既要执行父类的eat方法,也要执行子类的eat方法

b1.eat('金蝉')  #鹦鹉吃金蝉

 

继承的进阶

继承:单继承,多继承

类:经典类,新式类

新式类:凡是继承object的类都是新式类,python3版本所有的类都是新式类,都默认继承object类

经典类:凡是不继承object的类都是经典类,,python2版本所有的类都是经典类。

单继承:新式类,经典类查询顺序一样。先执行自己类中的,如果自己类中没有,在去继承继承类中的内容。

多继承:新式类:查询顺序遵循广度优先,经典类遵循深度优先。

下面为广度优先顺序:钻石继承,遵循的是每个结点有且只走一次。

下面的12345是查找的顺序。

广度优先:一条路走到倒数第2级,判断,如果其他路能走到终点,则返回走另一条路,如果不能,则走到终点。

深度优先,广度优先:只能是继承两个类的情况。

 

 

 

 

 

 

 

 

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值