• 面向对象 ---- 类,对象


    面向对象基础

    1.0 什么是面向对象

    1.1 面向过程编程

    核心就是“过程”,过程指的是做事情的步骤,即先做什么,再做什么。基于该编程思想编写程序,就好比一条工程流水线,一种机械式的思维方式。

    优点:逻辑清晰,复杂问题流程化,,进而简单化。

    缺点:可扩展性差。

    1.2 面向对象编程

    核心就是“对象”,对象指的是特征与技能的结合体。基于改编成思想编写程序,就好比在创造世界,一种上帝式的思维方式。

    优点:可扩展性高。

    缺点:编写程序的复杂程度要远高于面向过程编程

    2.0 在编程的时候优先使用面向过程变成还是使用面向对象编程?

    面向过程结合面向对象一起使用。

    类和对象

    1.0 什么是对象,什么是类?

    对象:特征与技能的结合体

    类:一系列对象相似的特征与技能的结合体

    在现实世界中:现有一个个具体存在的对象,人后将这些类似的对象结合在一起,就形成了类。

    在python程序中:必须先定义类,然后调用类来产生对象

    2.0 程序中定义类

    定义函数的时候,只检测语法,不执行代码。

    定义类的时候,类体代码会在类定义阶段就立刻执行。

    2.1 定义类

    如何定义类:先定义类,后调用类创造对象

    定义类的语法:

    def 函数名():
        pass
    
    class 类名:
        对象相同的特征
        对象相同的技能
      
    class:用来定义类的,class后跟的是类名。
    类名:类的名字,用来调用创造对象的。
    
    注意:类名不许遵循驼峰命名法,python在定义变量与函数的时候不推荐使用驼峰命名法,但在定义类使推荐使用。
    
    
    学生类:
        相同特征 --> 类内部的变量
        school
        
        相同技能 --> 类内部的函数
        learn
        choice_course
    
    2.2 定义类的时候发生的事情:

    1.类在定义的时候,会产生一个空的名称空间。

    2.会把类内部的所有名字扔进这个名称空间中

    注意:类在定义阶段就已经产生好了名称空间,执行python文件的时候会执行类内部的代码。

    2.3 调用类的时候发生的事情(重要

    1.首先会产生一个空的对象,就是产生”对象的名称空间“。

    2.会自动触发__init__.

    3.会把对象本身以及括号内的参数一并传给__init__函数。

    总结:调用类会产生一个对象,调用类的过程就叫做类的实例化,产生的对象称之为类的一个实例。

    2.4 查看类的名称空间
    print(Oldbaystudent.__dict__)
    
    2.5 类中的增,删,改,查
    class Oldboystudent:
    
        school = 'oldboy'
    
        def learn(self):
            print('learn python......')
    
        def choose_course(self):
            print('choose_course......')
    
    print(Oldboystudent)
    # 输出结果  <class '__main__.Oldboystudent'>
    
    print(Oldboystudent.__dict__) # 查看名称空间内的所有名字,以字典的行式返回。
    # 输出结果 {'__module__': '__main__', 'school': 'oldboy', 'learn': <function Oldboystudent.learn at 0x00000266DB3352F0>, 'choose_course': <function Oldboystudent.choose_course at 0x00000266F23FFAE8>, '__dict__': <attribute '__dict__' of 'Oldboystudent' objects>, '__weakref__': <attribute '__weakref__' of 'Oldboystudent' objects>, '__doc__': None}
    
    # 增
    Oldboystudent.adress = '上海'
    print(Oldboystudent.adress)   #输出结果  上海
    
    # 删
    Oldboystudent.school
    print(Oldboystudent.school)   #输出结果  oldboy
    
    # 改
    Oldboystudent.school = 'shanghai'
    print(Oldboystudent.school)    #输出结果  shanghai
    
    # 查
    print(Oldboystudent.school)    #输出结果   oldbay
    
    # 总结使用增删改查的过程中,直接类名.需要操作的变量名
    
    2.6 类的用法
    学生类
    class OldboyStudent:
        # 特征
        school = 'oldboy'
        print('tank is handsome...')
    
        # 技能
        def learn(self):
            print('learn python...')
    
        def choose_course(self):  # self = None
            print('choose_course ....')
    调用方法一:
    stu1 = OldboyStudent()  # OldboyStudent()---> 学生对象
    print(stu1, stu2, stu3)
    print('stu1', stu1.school)    # 输出结果 oldboy
    stu1.learn()                  # 输出结果 learn python...
    stu1.choose_course()          # 输出结果 choose_course ....
    
    # 总结:类在调用的时候,通过将类名加()的方式将这个类赋给一个变量名,想获取类内部的某些值或者函数的使用方法,赋予变量名.想要获取的内容。这种方法调用出来的内容是一致的,所有的对象与对象之间的特征与技能一样。
    
    调用方法二:给对象添加特征
    学生类
    class OldboyStudent:
        # 若__init__中有self以外的参数,调用类时必须在括号内传入参数。
        def __init__(self, x, y, z):  # self --> 就是对象本身  x = 高峰峰  y=93   z=female
            # print(self, x, y, z)
            # print('此处时__init__。。。。')
            # 给对象添加特征的方式二:
            self.name = x
            self.age = y
            self.sex = z
    
        # 特征
        school = 'oldboy'
        # print('tank is handsome...')
    
        # 技能
        def learn(self):
            print('learn python...')
    
        def choose_course(self):  # self = None
            print('choose_course ....')
    
    
    stu1 = OldboyStudent('高峰峰', 93, 'female')  # OldboyStudent()---> 学生对象
    stu2 = OldboyStudent('小丁丁', 84, 'female')  # OldboyStudent()---> 学生对象
    stu3 = OldboyStudent('大丁丁', 18, 'male')  # OldboyStudent()---> 学生对象
    
    print(stu1)
    print(stu2)
    print(stu3)
    
    给对象添加属性的方式一:
    print(stu1.name)
    stu1.name = '高峰峰'
    stu1.age = 93
    stu1.sex = 'female'
    print(stu1.name, stu1.age, stu1.sex)
    
    方式二打印:
    print(stu1.name)
    

    3.0 程序中定义对象

    调用类即可产生对象,调用类的过程,又被称为是类的实例化,实例化的结果被称为类的对象

    3.1 查看对象的名称空间
    print(stul.name, stul.school)
    

    4.0 名称空间的产生

    1.类的名称空间在类定义阶段就已经产生了。

    2.对象的名称空间在调用类的时候产生。

    5.0 对象与类的查找顺序

    1.对象.属性,若对象本身有,则有限查找对象自己的。

    2.若对象本身没有,则去类里面找,若类没有,则报错。

    class OldboyStudent:
        SCHOOL = 'oldboy'
        NAME = 'DDDDDDDD'
    
        def __init__(self, name, age, sex, school):
            self.name = name
            self.age = age
            self.sex = sex
            self.SCHOOL = school
    
    
    stu1 = OldboyStudent('小正正', 17, 'male', 'oldgirl')
    print(stu1.SCHOOL)
    print(stu1.NAME)
    

    6.0 对象绑定方法的特殊之处

    类内部的函数主要给对象用的:

    1.由类来调用类内部的函数,该函数知识一个普通的函数,普通函数需要几个参数就得传入几个参数。

    2.有对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中。

    对象的绑定方法,是由对象来调用的,特殊之处就是把对象当作第一个参数传入该方法中

    class OldboyStudent:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
        # 特征
        school = 'oldboy'
        # 技能
        def learn(self):  # 普通函数
            # print('stu:', self)
            print('learn python...')
    
        def choose_course(self, course):  # self =
            print(f'[{self.name}]choose_course {course} ....')
    
    stu1 = OldboyStudent('高凤凤1', 73, 'female')
    stu2 = OldboyStudent('高凤凤2', 84, 'male')
    
    stu1.choose_course('python')  # choose_course(self, 'python')
    stu2.choose_course('linux')  # choose_course(self, 'python')
    
  • 相关阅读:
    git基本使用
    list和tuple
    牛客(60)把二叉树打印成多行
    牛客(59)按之字形顺序打印二叉树
    牛客(58)对称的二叉树
    牛客(57)二叉树的下一个结点
    牛客(56)删除链表中重复的结点
    牛客(55)链表中环的入口结点
    mybits(1)配置
    牛客(53)表示数值的字符串
  • 原文地址:https://www.cnblogs.com/whkzm/p/11643692.html
Copyright © 2020-2023  润新知