码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象之继承

时间:2018-07-25 23:10:24      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:dict   方法   python2   判断   两种   派生类   ini   查询   obj   

继承:
    单继承和多继承
1.初识
class Father(object): #如果不写object默认继承
    pass

class Son(Father): #括号里面的称为:父类或基类或超类  括号外面的称为:子类或派生类
    pass

class Animal:

    breath = 呼吸

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

    def eat(self):
        print(self)#111   #<__main__.Person object at 0x111ac3710>
        print(动物都需要进食....)


class Person(Animal):
    pass

print(Person.breath)#呼吸
Person.eat(111)#动物都需要进食....

p1 = Person(Jake, , 20)
print(p1.breath)#呼吸
print(p1)#<__main__.Person object at 0x111ac3710>
p1.eat()#动物都需要进食....

结果:
    呼吸
    111
    动物都需要进食....
    呼吸
    <__main__.Person object at 0x111ac3710>
    <__main__.Person object at 0x111ac3710>
    动物都需要进食....

总结:
    子类以及子类实例化的对象,可以访问父类的任何方法和变量。
    类名可以访问父类的所有内容。
    子类实例化的对象也可以访问父类所有内容。




只执行父类的方法:子类中不要定义与父类同名的方法
只执行子类的方法:在子类创建这个方法.

既要执行子类的方法,又要执行父类的方法?
有两种解决方法.1.通过类名。2.通过super()函数
    1,Animal.__init__(self, name, sex, age)
    2,super().__init__(name,sex,age)

class Animal:

    breath = 呼吸

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

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


class Person(Animal):
    def __init__(self, name,sex,age,wing): 
        # Animal.__init__(self, name, sex, age)
        super().__init__(name,sex,age)  #  super(Brid,self).__init__(name,sex,age)
        self.wing = wing

    def eat(self,argv):
        super().eat(argv)
        print(吃...)

p1 = Person(鹦鹉,,20,绿翅膀)
print(p1.__dict__)
p1.eat(金蝉)

结果:
    {name: 鹦鹉, sex: , age: 20, wing: 绿翅膀}
    鹦鹉吃金蝉
    吃...


2.进阶

类: 经典类, 新式类
新式类: 凡是继承object类都是新式类.
    python3x 所有的类都是新式类,因为python3x中的类都默认继承object.

经典类: 不继承object类都是经典类
    python2x:(既有新式类,又有经典类) 所有的类默认都不继承object类,
             所有的类默认都是经典类.你可以让其继承object.


单继承: 新式类,经典类查询顺序一样.

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

多继承的新式类  广度优先 : 一条路走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路.如果不能,则走到终点.
多继承的经典类  深度优先 : 一条路走到底.

技术分享图片技术分享图片技术分享图片

Python面向对象之继承

标签:dict   方法   python2   判断   两种   派生类   ini   查询   obj   

原文地址:https://www.cnblogs.com/xiao-xue-di/p/9368837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!