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

    print('面向对象编程基础预习')
    '''
    面向过程编程:
    核心是过程二字,过程指的是解决问题的步骤,即先干什么,在干什么,最后干什么...
    基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式

    优点:复杂的问题流程化,进而简单化,
    缺点:可扩展性差

    面向对象编程:
    就是围绕提高程序扩展性的问题
    核心是对象二字,对象指的是特征(变量)与技能(函数)的结合体
    对象就是单个个体与普遍共性的统一
    基于该思想编写程序,就好比是在创造一个世界,你就是世界的上帝
    在上帝眼里,一切存在的事物都是对象,任何不存在的对象也都可以造出来
    是一种上帝式的思维方式

    优点:扩展性强
    缺点:编程的复杂度高


    类:如果说对象是特征与技能的而结合体,那么类就是一系列对象相似的特征与技能的结合体
    PS:站在不同的角度总结出的类是不同的
    在现实世界中,一定是先有对象,再有分类的概念

    在程序中,请务必记住,一定要先定义类,后调用类,来产生对象

    在现实世界中,站在老男孩选课系统角度
    对象一:
    特征:
    school = 'oldboy'
    name = '李泰迪'
    sex = 'male'
    age = 18
    choosed_courses = [python,linux]
    技能:
    选课
    对象二:
    特征:
    school = 'oldboy'
    name = 牛榴弹'
    sex = 'female'
    age = 24
    choosed_course = [linux]
    技能:
    选课
    对象n....

    对象3:老师
    特征:
    school = 'oldboy'
    name = 'egon'
    sex = 'male'
    age = 18
    level = 10
    技能:
    打分
    点名


    对象n....

    现实世界中,老男孩学生类
    相似的特征:
    school = 'oldboy'
    相似的技能:
    选课
    '''
    ###再程序中,先定义类
    ##在类定义阶段就会立即执行类体代码,会产生类的名称空间,用于将类体代码执行过程中产生
    #的名字都存存放在类的名称空间中

    # class OldboyStudent: ###定义类的名称用驼峰体,定义函数或者变量用下划线
    # school = 'oldboy' ####相似的特征用变量定义
    # print('======================')
    # def choose_course(self):
    # print('is choosing course')

    ##后调用类来产生对象,调用类的过程又称之为实例化
    # stu1 = OldboyStudent()
    ##stu1可以称为一个对象,也可以称之为一个实例
    '''

    类与对象的使用
    类的使用:

    '''
    '''
    类有两种用途:
    用途一:类本身就是一个容器(名称空间),所以可以增删改查类的属性
    print(OldboyStudent.__dict__)####查看该类的名称空间并打印出来
    print(OldboyStudent.school)####查看该类的属性并打印出来
    print(OldboyStudent.choose_course)###查看该类的技能
    print('===================================')
    print(OldboyStudent.__dict__)
    ##修改之前查看一下该类的名称空间
    print('=================================')
    OldboyStudent.school = 'oldgirl'
    OldboyStudent.country = 'China'
    print(OldboyStudent.__dict__)
    ##修改之后再查看一下该类的名称空间,查看是否是一样的

    用途二:调用类来产生对象,调用类的过程称之为实例化

    '''

    # class OldboyStudent: ###定义类的名称用驼峰体,定义函数或者变量用下划线
    # school = 'oldboy' ####相似的特征用变量定义
    # # print('======================')
    # def choose_course(self):
    # print('is choosing course')

    ###调用类生成对象
    # stu1= OldboyStudent()
    # stu2 = OldboyStudent()
    # stu3 = OldboyStudent()
    # ...
    # print(stu1.school)
    ###对象独有的属性
    # stu1.name = '李明'
    # stu1.age = 29
    # stu1.sex = 'male'
    # print(stu1.__dict__)
    ###对象的单独属性和功能可以这样定义
    ###同样的,其他的对象也可以这样一行一行的增删改查相应的属性和功能
    ###但是如果真的这样一行一行的写,那么效率就真的太低下了,为了减少代码量
    ##简化这个程序,我们想到了一种初始化的方式,定义一个函数,可以避免这种繁琐的操作

    # def init(obj,x,y,z):
    # obj.name = x
    # obj.sex = y
    # obj.age = z

    # init(stu2,'王大宝','male',24)
    # print(stu2.__dict__)
    # init(stu3,'孙小明','female',33)
    # print(stu3.__dict__)
    '''
    对象的属性查找顺序:
    首先在对象自己的名称空间中查找,然后再在类的名称空间中查找,
    在类的名称空间中查找不到的时候就会报错,不会在全局变量中查找
    '''


    '''
    初始化
    初始化方法;会在类调用时,或者叫实例化时自动触发__init(stu1,x,y,z)
    '''

    #
    # class OldboyStudent: ###定义类的名称用驼峰体,定义函数或者变量用下划线
    # school = 'oldboy' ####相似的特征用变量定义
    # # print('======================')
    # def choose_course(self):
    # print('is choosing course')
    #
    # def init(obj,x,y,z):
    # obj.name = x
    # obj.sex = y
    # obj.age = z

    ###会在类调用时,或者叫实例化时自动触发__init(stu1,)
    # stu1= OldboyStudent()
    # stu2 = OldboyStudent()
    # stu3 = OldboyStudent()
    # init(stu1,'王二丫','female',18)
    # init(stu3,'孙小明','male',24)
    # init(stu3,'狗剩子','female',33)

    ###看这个代码,定义一次类,然后调用三次类,生成三个对象,然后定义一个初始化的函数,调用三次初始化的函数,
    # 给三个对象赋予自己特殊的属性和功能,
    #相对于之前一个对象一个属性一行代码的写,这样的效率确实高了一些,但是我们还是觉得这样太麻烦,
    # 我们想寻求一种更加简单的方式,简化代码

    ##所以我们尝试用下面这种做法

    class OldboyStudent: ###定义类的名称用驼峰体,定义函数或者变量用下划线
    school = 'oldboy' ####相似的特征用变量定义
    # print('======================')
    def choose_course(self):
    print('is choosing course')

    def __init__(self, x, y, z): ###将这个函数放到类定义的内部去
    self.name = x
    self.sex = y
    self.age = z

    stu1 = OldboyStudent('孙小平','male',24)
    print(stu1.__dict__)


    print('========================================================')
    '''
    绑定方法:
    绑定方法的特殊之处:
    1,绑定给谁就应该由谁来调用
    2,谁来调用,就会将谁当做第一个参数自动传入

    '''
    stu1 = OldboyStudent('孙小平','male',24)
    stu2 = OldboyStudent('王大明','male',25)
    stu3 = OldboyStudent('李小二','male',26)
    stu1.school = 'oldgirl'
    print(stu1.school)
    print(stu2.school)
    OldboyStudent.school = 'tongji'
    print(stu3.school)

    print(stu1.choose_course)
    print(stu2.choose_course)
    print(stu3.choose_course)
    stu1.choose_course() ###choose_course(stu1)


    '''
    总结对象的好处:
    1,在没有学习类这个概念之前,数据和功能是分离的,类,对象,将属性(数据)和功能绑定在一起了.

    在python3中,统一了类与类型的概念,这里的类也就是类型
    python中一切皆对象,万物皆对象

    '''
  • 相关阅读:
    排序sort (一)
    c++实现二叉树笔记(模板实现)(三)
    树(二叉树)的建立和遍历算法(二)
    IO流之字节流
    计算机基础知识
    计算机启动过程
    2020软考报名计划表
    2020软件工程作业02
    初来乍到 20200904
    关于考研
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10884329.html
Copyright © 2011-2022 走看看