zoukankan      html  css  js  c++  java
  • python面向对象开发的自我理解

    ​详细代码理解可以参考

     笨鸟教程博客:http://www.runoob.com/python3/python3-class.html


    面向对象经常被提起,那到底什么是面向对象呢?

    它的基本概念:类,对象、实例,属性,方法以及封装、继承、多态还有组合到底是什么呢?

    对象可以是世间万物。

    面向过程:它是以数据为中心,按照人的逻辑使用比如c语言代码 处理数据来完成任务的过程。

    比如把大象放入冰箱内总共分三步:

    第一步:打开冰箱门;

    第二步:把大象放进冰箱;

    第三部:关上冰箱门。

    可以看出这个逻辑潜在的含义是这些事都有人来做,你或我或某某来打开冰箱门,来放入大象,来关上冰箱门。

    面向对象:是不以人完成事件步骤为主线,而是将世间万物(对象,且是具有能动性的对象,具体来说就是包含数据特征即属性和能力即方法(或称函数))为主线,然后拼装对象属性及方法来完成任务。

    还是把大象放入冰箱内。

    此时可以以冰箱为对象,冰箱具有开门关门的数据(可以用0表示关门,1表示开门)即属性。可以有开门关门的能力即方法(方法也称函数)。这样把大象放入冰箱就不是人去打开冰箱了,冰箱就相当于自动冰箱了,会开关门。人也可以看做是对象,有放大象进冰箱的方法。

    以上的冰箱和人都是对象,那什么是实例呢?

    对象是抽象的概括的集合,像马这个概念一样,你找不到一个既黑又白既胖又瘦的马,但你能找到白色的那头马,黑色的那头马,但这些马又都属于上面那个概念马。所以对象是抽象的概念,实例就是具体化的对象。冰箱若是对象,那他的实例可以是海尔冰箱,可以是格力冰箱(不知道格力有没有冰箱)等。

    那属性是什么呢:

    属性其实是数据。方法其实是函数。类就是那个抽象的对象。

    对象的属性存在于类的内部,但在类的方法外。

    实例的属性放在类内部方法内或类外的实例下。分为私有和非私有属性。私有实例属性以双下划线开头,只能定义在类内,在类外无法访问到,即使你用 实例.__私有属性 进行访问也仅是在类外建立了一个实例下的属性。因为类内的私有属性一旦建立,python会在后台给这个私有的实例属性(当然在类内定义的,类外也无法建立)改名。所以你在实例中是无法访问到类内的实例属性的。其中self代表的就是实例的意思。

     1 #这是注释行
     2 #下面是类内
     3 class 类1:
     4     类属性1=1 #类属性定义在类内,类方法外
     5     类属性2=2
     6     __类属性3="Tom" #
     7     def __init__(self,a1,b1): #a,b 是实例1传进来的参数,这是一个特殊的类方法,被称为构造函数,一旦这个类1被创建一个实例会在后台自动调用这个类构造方法。
     8          self.实例属性1=a1 #定义了一个实例属性
     9          self.__实例属性2=b1   #双下划线开头定义了一个私有的实例属性, 它在类外访问不到,定义好后python会把这个私有实例属性在后台改名  
    10     def  方法1(self):
    11          self.实例属性1=1
    12          self.实例属性2=2
    13          
    14     def  方法2(self):
    15          self.实例属性1=1
    16          self.实例属性2=2
    17          print('和为',self.实例属性1+self.实例属性2) #在类内使用实例属性
    18     print('类1的类属性1:',类1.类属性1,'类1的类属性2:',类1.类属性2,) #类内使用类属性,不管是类内还是类外,使用类属性都是 类名.类属性名
    19 
    20 #下面是类外
    21 if __name__=='__main__':
    22     实例1=类1(a,b)#类相当于一个模子,这个实例具有了这个类的所有非私有属性和方法。
    23     print('实例1.实例属性1') #类外使用实例属性,这个实例属性1是构造函数中的实例属性1,方法1和方法2中的实例属性还不能用,因为还没有调用这些方法,所有那些方法下的实例属
    24     #性不能用,但构造函数在由类创建实例时已经被自动调用
    25     类1.类属性2=4  #可以在类外修改类属性,此后所有实例继承的此类属性值全部改变。   
    26     实例1.__实例属性2=3 #此处试图改变私有实例属性,私有实例属性无法在类外访问,故此处相当于不合潜规则的新建了一个类外实例属性,虽然不报错,但一般不这么做
    27     实例1.实例属性5=5 #可以这么用,这是在实例下创建了一个实例属性
    28     实例1.方法2() #这是在类外调用类方法,self是默认形参数,实参可以没有,故此处方法2参数没写。

    怕您看不清,下面把图奉上:

    对象存在于问题分析阶段,转化到代码时定义的这个对象就被称为类了。

  • 相关阅读:
    查询安装webpack4.0是否成功时提示无法找到的解决方法
    clientHeight—scrollHeight—offsetHeight三者的区别
    onunload事件不触发的探索
    你知道刷社保卡看病买药也能扫二维码支付吗?(以成都市社保卡为例)
    成都市新社保卡线上申请方法(无需线下办理,手机直接搞定)
    jquery实现移动端页面加载后,向上滚动指定距离无效引起的探索
    社保官网查询密码重置及注册(以成都为例)
    社保对线上购买保险时2个你不知道的影响(最后一个真的太坑爹,中招的人肯定不在少数)
    坑爹的京东E卡
    Mongodb(一)
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/6936822.html
Copyright © 2011-2022 走看看