2018年7月27日python面向对象中的继承

只要跟对象有关系的前面就要加self,面向对象操作的时候

操作系统,环境,开发软件?

函数式开发和面向对象的开发的区别:
函数式开发在每次调用的时候都需要给参数传参,
而面向对象的开发,可以把函数定义在类型里面叫做方法,只需要在创建对象的时候传一次参就可以了,
之后可以直接调用类型中的方法

面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条
流水线,考虑周全什么时候处理什么东西。
优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。
缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

在python 中面向对象的程序设计并不是全部。
面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可
以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。


如果父类的属性子类用不完怎么办?
一般没有这种情况,写类型之前要先分析,分析出来一个类型定义一些公共的属性为父类,
然后其他的类在父类的基础上如果需要添加属性再添加
理论都是在实践之后得出来的,所以要想明白就多练

多继承就是可以继承多个类型,用于解决一个对象有多个角色


查看文件的命令
import os
os.listdir("f:")

命令行用的是gbk编码

继承中,在子类方法之中加super().父类中的方法名,子类方法执行完之后就会执行父类的方法

**********************************
1) 继承的语法结构
继承的语法结构:
    class 类型(要继承的类型):
        pass

    当前类型:子类
    要继承的类型:父类
    子类继承父类

python中:类型的后面可以不添加括号[默认继承了object类型]
    class Pet: ==  class Pet(object): == class Pet():

python中查看自己到底继承了哪些父类:
用魔法属性:类型名._ _base_ _ 查看当前类型继承的父类
 S._ _base__
<class '__main__.Person'>

怎么查看对象的当前类型:
 通过类型的_ _class_ _魔法属性,直接查看,和type(类型名称)效果一致!
 对象名._ _class_ _ == type(对象)--> 得到当前对象的所属类型
 s._ _class_ _
<class '__main__.Person'>

怎么查看当前类型的所有子类:
 通过类型的父类名._ _subclasses_ _()这个魔法函数,直接以列表的形式查看当前类型的所有子类
Person._ _subclasses_ _()
[<class '__main__.Student'>, <class '__main__.S'>]

(2) 继承的意义
>> 子类中可以编写父类中没有的属性和方法
    实现功能的扩展!

>> 子类中可以重写父类中已经在的方法【方法重写】
   执行该方法的过程中,如果子类没有重写该方法,执行父类的方法
   如果子类重写了该方法,直接执行子类的方法,方法名相同。

>> 
> 方法重载:[python没有方法重载]在一个类型中,出现了两个或者两个以上
   相同名称的方法[参数不同],根据传递不同的参数执行不同的方法!
   由于python弱类型语言的特性,已经在方法中具备了这样的功能
   python中没有方法重载
   非要给python添加一个方法重载的概念的话:@[email protected]

********************************

如果继承了父类之后,子类需要添加自己的属性的话,需要把父类的属性先传递给子类,传递方法
有两种,具体代码如下,在父类的基础上添加了age属性:
class Zhishen(God):
    def __init__(self, name, age):
        #调用父类初始化函数~初始化父类数据
        # God.__init__(self, name) # 类型调用             #这两种方法效果一样
        super(Zhishen, self).__init__(name) # 对象调用

**************************************
多继承,一个类继承多个父类,【多继承-广度优先 VS 深度优先】,检索是深度优先:
python的多继承:体现的是 生活中 一个对象 会有多个角色的概念

如果一个类型继承了多个类,这个类型里面是pass,调用这个类型中的一个方法的时候,会先
寻找继承的第一个父类中有没有这个方法,如果有的话就直接调用第一个父类中的那个方法,
如果继承的第一个父类中没有那个那个方法的话就寻找第二个父类,这样依次寻找,先深度再广度。
 
lass A():
    def __init__(self):
        self.value = "类型AAAAAAAAAAA的value值"
    def show(self):
        print("类型aaaaaaaaaaaa中的show执行了")

class B(A):
    pass

class C():
    def __init__(self):
        self.value = "类型CCCCCCCCC中的value值"
    def show(self):
        print("类型ccccccccccccc中的show执行了")
class X(B, C):
    pass

x = X()
x.show()
>>>>类型aaaaaaaaaaaa中的show执行了


 

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/81273649
今日推荐