python中类与对象之继承,python类和对象理解,面对对象的三大特性之


面对对象的三大特性之继承

1.什么是继承?

在程序中,继承指的是class与class之间的关系

继承是一种关系,必须存在两个class才能产生这种关系;被继承的class称为父类,继承的class称为子类。

2.为什么要使用继承?

现实中,通过继承,子可以直接使用父的内容。

在程序中,通过继承,子类可以直接使用父类已有的代码

3.如何使用继承

#继承的定义class Father1:    x = 13    print(‘这是父类的x‘, x)    def coding(self):        print(‘我是父类的对象的绑定方法coding‘)    @classmethod    def missing(cls):        print(‘这是父类的绑定方法missing‘)class Father2:    y = 14    print(‘这是父类Father的y‘, y)class Son(Father1, Father2):    pass?print(Son.x)print(Son.y)son1 = Son()Son.coding(son1)Son.missing()son1.missing()??###输出结果        13        14        我是父类的对象的绑定方法coding        这是父类的绑定方法missing    #1.命名方式:          在子类中类名加上括号,加上父类的名称即可#2.在python中,一个子类可以有多个父类,多个父类在括号中用逗号隔开,这一点在其他语言中是不支持的。#3.子类中的对象可以访问父类的属性和方法。#4.子类可以调用父类的绑定方法

4.抽象

抽象:就是抽取公共的父类的方法

抽象的作用:抽取多个类中相同的方法和属性形成一个新的类

#应用如下:class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def eating(self):        print(‘%s要吃饭‘ % self.name)    def sleeping(self):        print(‘%s要睡觉‘ % self.name)?class Child(Person):    def crying(self, mom):        print(‘%s今年%s岁会哭着找妈妈%s‘ % (self.name, self.age, mom.name))?class Adult(Person):    def working(self, papa):        print(‘%s会找老公%s‘ % (self.name, papa.name))?xiaoming = Child(‘xiaoming‘ , 2)mom = Adult(‘jessic‘, 28)papa = Adult(‘egon‘, 30)xiaoming.crying(mom)mom.working(papa)xiaoming.eating()xiaoming.sleeping()?###输出结果xiaoming今年2岁会哭着找妈妈jessicjessic会找老公egonxiaoming要吃饭xiaoming要睡觉?#总结:1.通过继承,避免了重复代码的书写2.通过抽象,避免了继承一些不该有的方法和属性3.写继承时应该先抽象再继承4.在抽取过程中,可能会有一些跟业务需求无关的类这是正常的,这些称为公共父类。5.公共父类的作用是储存多个子类相同的属性和方法

5.派生

派生指的是子类继承父类,并且拥有自己独特的属性或技能,该子类称为派生。派生类一定是子类。

#为什么有派生类?#因为子类可能有自己独特的属性需要添加class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def say_hi(self):        print("hello my name is %s,i‘m %s years old" % (self.name, self.age))?class Student(Person):    def __init__(self, name, age, adress):        self.name = name        self.age = age        self.adress = adress    def attend_class(self):        print(‘%s家在%s,%s岁,要好好学习‘ % (self.name, self.adress, self.age))?daidai = Student(‘daidai‘, 26, ‘china‘)daidai.say_hi()daidai.attend_class()hello my name is daidai,i‘m 26 years olddaidai家在china,26岁,要好好学习?#Student就是一个派生类


?

6.子类访问父类的方法和属性

在派生中,相同的初始化属性,相同部分写了重复代码

有两种方式可以让子类访问父类的方法和属性

class Student(Person):    def __init__(self, name, age, adress):        #第一种调用方式:在子类中重用父类方法。这种调用方式与继承关系无关        Person.__init__(self, name, age)        self.adress = adress            def attend_class(self):        print(‘%s家在%s,%s岁,要好好学习‘ % (self.name, self.adress, self.age))?daidai = Student(‘daidai‘, 26, ‘china‘)daidai.say_hi()daidai.attend_class()?###2.class Student(Person):    def __init__(self, name, age, adress):        #第二种调用方式:利用super()        #super()表示创建一个特殊对象,可用于调用父类        super().__init__(name,age)        # Person.__init__(self, name, age)        self.adress = adress    def attend_class(self):        print(‘%s家在%s,%s岁,要好好学习‘ % (self.name, self.adress, self.age))?daidai = Student(‘daidai‘, 26, ‘china‘)daidai.say_hi()daidai.attend_class()?##了解在python2中,super()的使用方法有所不同,需要写成:super(Student, self).__init__(name, age)#其中Student表示父类,self表示是对象本身

7.继承后子类的属性查找

class S:    x = 1?class A(S):    x = 2?class B(A):    x = 3?b = B()b.x = 4print(b.x)?子类对象和对象的查找方法的查找顺序:对象——>B(子类)——>A(父类)——>S(父类)?#如果一个子类有多个父类时查找顺序#1.如果父类不存在自己的父类时,按照继承的顺序去查找BASC#2.如果父类还有自己的父类时,则按照继承顺序沿一条线找到底(深度查找)#3.如果存在两层关系还有公共关系时,会按照广度优先原则查找,也就是最后一层不会先找,先按照深度原则找完父类,然后再找父类的公共类class C:    x = 5class S:    x = 1?class A:    x = 2?class B(A, S, C):    x = 3?b = B()b.x = 4print(b.x)??#注意:1.在经典类中,属性的查找只按照深度查找原则2.只有在python2中才有经典类

8.经典类和新式类

所有直接继承或者间接继承object的类,都是新式类,object称之为根类,意思时所有类都是源自object类

为什么这么设计?

创建对象时,需要申请内存空间,创建新的名称空间,将对象的属性放入名称空间,这一复杂的基础操作都是由object完成的。简单来说就是object提供了一些常用的基础操作

注意:

1.在python3中,所有类都是object的子类,所有类都是新式类

2.在python2中,默认的是经典类,不会继承object

#区别#python3中定义类class Cls():    print(‘python3中定义类‘)    #python2中class Cls(Object):    print(‘python2中定义类‘)

——base——的作用

class Cls():    print(‘python3中定义类‘)Cls.__base__?#Cls.__base__用于查看父类??Cls.mor().mor()显示属性列表

python中类与对象之继承

评论关闭