zoukankan      html  css  js  c++  java
  • 面向对象

     

    一、面向对象编程

    1、面向过程编程:

      核心是'过程'二字,过程指的是解决问题的步奏,即想干什么后干什么基于该思想编写程序就好比在

      编写一条流水线,是一种机械式的思维方式。

      

      优点:复杂的问题流程化,进而简单化

      缺点:可扩展性差

    2、面向对象:

      核心'对象'二字,对象指的是特征与技能的结合体,基于该思想编写程序就好比在创造一个世界,你就

      是这个世界的上帝,是一种上帝式的思维方式。

      

      优点:可扩展性强

      缺点:编程的复杂度高于面向过程

      

    二、类

    1、类:

      对象是特征与技能的结合体,类就是一系列对象相同的特征与相同技能的结合体

      在现实世界中:一定先有对象,后来随着人类文明的发展总结出的类,对象是具体存在的,而类只是一种抽象的概念

      在程序中:务必保证,先定义类,后调用类来产生对象

    2、现实生活中的对象:

      对象1:

        特征:

          school=‘oldboy’

          name=‘马冬梅’

          age=18

          sex=‘female’

         技能:

          学习

          选课

      对象2:

        特征:

          school=‘oldboy’

          name=‘甜蜜蜜’

          age=21

          sex=‘male’

         技能:

          学习

          选课

      对象3:

        特征:

          school=‘oldboy’

          name=‘袁世凯’

          age=18

          sex=‘male’

         技能:

          学习

          选课

    现实生活中的老男孩学生类:

      相同的特征

        school='oldboy'

      相同的技能

        学习

        选课

    3、程序中的类

    class OldboyStudent:
        #用变量表示相同的特征
        school='01dboy'
    
        #用函数表示相同的技能
        def learn(self):
            print('is learning...')
    
    
        def choose(self):
            print('choose course....')

    注意:在定义类的阶段会立刻执行类体内的代码,然后将产生的名字存放在类的名称空间中

    print(OldboyStudent.__dict__['school'])#01dboy
    print(OldboyStudent.__dict__['learn'])#<function OldboyStudent.learn at 0x0000022548708AE8>
    OldboyStudent.__dict__['learn'](123)#is learning...
    
    print(OldboyStudent.school)#01dboy相似于 print(OldboyStudent.__dict__['school'])#01dboy
    print(OldboyStudent.learn)#<function OldboyStudent.learn at 0x000002C5AA488AE8>
    OldboyStudent.learn(123)#is learning...
    #点之后是类的属性
    
    #类的增删改查(类可以理解为一个字典)
    OldboyStudent.country='china'
    OldboyStudent.school='xxxx'
    del OldboyStudent.country
    print(OldboyStudent.__dict__)

    三、调用类、产生程序中的对象

    1、定义类

    class OldboyStudent:
        #用变量表示特征
        school='oldboy'
    
        #创建__init__的函数,用来接收对象和位置参数
        #stu1, '马冬梅', 18, 'female'
        def __init__(self,name,age,sex):#self=stu1  name='马冬梅'  age=18  sex='female'
            self.name=name #stu1.name='马冬梅'
            self.age=age #stu1.age=18
            self.sex=sex #stu1.sex='female'
            #self就是一个变量名,为了接收第一个位置参数,self代表对象stu1自己
    
        #用函数表示技能
        def learn(self):
            print('is learn ....')
    
        def choose(self):
            print('is choose...')

    2、调用类产生三个空对象

    stu1=OldboyStudent()
    stu2=OldboyStudent()
    stu3=OldboyStudent()
    print(stu1)#<__main__.OldboyStudent object at 0x000001D060D87A20>
    print(stu2)#<__main__.OldboyStudent object at 0x000001D060D87A58>
    print(stu3)#<__main__.OldboyStudent object at 0x000001D060D87A90>

    上述产生的三个对象都一样没有独特的属性,

    因此需要在OldboyStudent类内定义一个__init__的函数,该函数会在调用类时自动触发执行

    stu1=OldboyStudent( ' 马冬梅' ,18, ' female ' ) # OldboyStudent.__init__(stu1,'马冬梅',18,'female') 
    print (stu1.name) # 马冬梅
    print (stu1.age) # 18 
    print (stu1 .sex) # female
    
    
    stu2 =OldboyStudent( ' 甜蜜蜜' ,21, ' male ' )
    #stu2.NAME = ' 甜蜜蜜' 
    #stu2.AGE =21 
    #stu2.SEX = ' male ' 
    print (stu2.name) # 甜蜜蜜
    print (stu2.age) # 21 
    print (stu2.sex) # male
    
    
    stu3 =OldboyStudent( ' 袁世凯' ,23, ' male ' )
     print (stu3.name,stu3.age,stu3.sex)
     # 袁世凯23 male

    总结:调用类发生哪些事:

      1、首先会产生一个空的对象stu1

      2、会自动触发类内部的__init__函数

      3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,'马冬梅',18,'female'),将这四个参数一起传给__init__函数

    四、对象的使用

    定义类的时候就会产生类的名称空间

    class OldboyStudent:
        school='oldboy'
    
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
    
        #self=stu1
        def learn(self):
            print('%s is learn....'%self.name)
    
        def choose(self,course):
            print('%s is choosing %s'%(self.name,course))

    调用类----》调用类产生类的对象,该对象也可以称为类的一个实例,调用类的过程称为类的实例化

    stu1=OldboyStudent('张三',18,'male')#OldboyStudent.__init__('张三',18,'male')
    
    #查看对象的名称空间
    print(stu1.__dict__)#{'name': '张三', 'age': 18, 'sex': 'male'}
    print(stu1.name)#张三

    类内部定义的函数,类可以使用,但是类来用的时候就是一个普通函数,普通函数有几个参数就传几个参数。

    print(OldboyStudent.learn)
    #<function OldboyStudent.learn at 0x00000234D9ED8B70>
    OldboyStudent.learn(123)
    #is learn....

    类内部定义的变量是给所有对象共享,所有对象指向的都是同一个内存地址

    类内部定义的函数,其实就是给对象使用的,而且是绑定给对象使用的,绑定给不同的对象就是不同的绑定关系

    print(stu1.learn)
    #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x0000024ADD7B7AC8>>
    print(stu2.learn)
    #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x0000024ADD7B7B00>>

    绑定方法的特殊之处就在于,谁来调用,就会将谁当做第一个参数自动传入

    stu1.learn()#OldboyStudent.learn(stu1)
    #张三 is learn....
    stu1.choose('python')#张三 is choosing python
    #一切皆对象
    class OldboyStudent:
        school='oldboy'
    
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
    
        #self=stu1
        def learn(self):
            print('%s is learn....'%self.name)
    
        def choose(self,course):
            print('%s is choosing %s'%(self.name,course))
    
    stu1=OldboyStudent('张三',18,'male')#OldboyStudent.__init__('张三',18,'male')
    
    l1=[1,2,3]
    l1.append(4)
    print(l1)#[1, 2, 3, 4]
    
    l1=[1,2,3]
    list.append(l1,4)#其实类就是类型,list就是一个类
    print(l1)#[1, 2, 3, 4]
  • 相关阅读:
    好题记录
    「同余数论」学习笔记
    「网络流」学习笔记
    物理知识相关内容总结
    「多项式」学习笔记
    「数论函数」学习笔记
    「点分治」学习笔记
    「线性基」学习笔记
    「后缀自动机」学习笔记
    「后缀数组」学习笔记
  • 原文地址:https://www.cnblogs.com/happyfei/p/9527221.html
Copyright © 2011-2022 走看看