• 面向对象的编程思想及类的使用


    面向对象的编程思想
    ​ 核心是对象二字,对象是特征与技能的结合体
    ​ 基于该思想编写程序(脑子里始终想的是对象二字),就好比在创造一个世界,世界有一个个对象组成,
    在上帝眼里任何不存在的事物都可以创造,是一中上帝式的思维方式
    ​ 优点:可拓展性强
    ​ 缺点:编程的复杂度要高于面向过程

    类:
    ​ 对象是特征与技能的结合体,而类则是一些列对象相同的特征与技能的结合体
    ​ 强调:1.对象是具体存在的事物,而类是一个抽象的概念
    ​ 2.站在不同的角度总结出类与对象是的不同

    ​现实世界中:现有一个个具体存在的对象,然后对着人类文明的发展才总结出的类的概念
    ​在程序中:先定义类,后调用类来产生对象

    站在老男孩选课的角度
    总结出现实世界中的对象
    学生对象1:
    ​ 特征:
    学校 = ‘ oldboy’
    ​ name = ‘egon’
    ​ age = ‘79’
    ​ sex = ‘female’
    ​ 技能:
    ​ 选课

    学生对象2:
    ​ 特征:
    学校 = ‘ oldboy’
    ​ name = ‘bgon’
    ​ age = ‘45’
    ​ sex = ‘female’
    ​ 技能:
    ​ 选课

    学生对象3:
    ​ 特征:
    学校 = ‘ oldboy’
    ​ name = ‘cgon’
    ​ age = ‘60’
    ​ sex = ‘male’
    ​ 技能:
    ​ 选课


    在程序中
    1.先定义类
    class OldboyStudent:
    # 相同的特征
    school = 'oldboy'

    # 相同的技能
    def choose_course(self):
    print('choose course')

    print('=====>>>>')
    类是一些列对象相同的特征(变量)与技能(函数)的结合体,即类体重最常见的就是变量与函数的定义,
    但其实类体中是可以存在任意python代码的
    类体代码会在类体定义阶段立即执行,会产生一个名称空间,用来将类体代码的名字丢进去,产看方式如下
    print(OldboyStudent.school) # print(OldboyStudent.__dict__['school'])
    print(OldboyStudent.choose_course)
    print(OldboyStudent.__dict__) # 查看类的名称空间
    .(点后面的都是属性)

    修改数据
    OldboyStudent.school = 'OLDBOY'
    print(OldboyStudent.__dict__)

    增加数据
    OldboyStudent.county = 'China'
    print(OldboyStudent.county)

    删除数据
    del OldboyStudent.county
    print(OldboyStudent.__dict__)

    OldboyStudent.choose_course(123) # 运行报错
    print(OldboyStudent.choose_course)

    总结:
    1.类就是一个名称空间,或者说是一个用来寻访变量和函数的容器
    2.类的用途之一就是当做名称空间从其内部取出名字来使用
    3.类的用途之二是调用类来产生对象

    2.后调用来产生对象
    调用类的过程称之为类的实例化,调用类的返回值称之为类的一个对象/实例


    调用类发生了??
    1.会产生一个对象,然后返回

    stu1 = OldboyStudent()
    stu2 = OldboyStudent()
    stu3 = OldboyStudent()
    #
    print(stu1.__dict__)
    print(stu2.__dict__)
    print(stu3.__dict__)

    不同的属性
    学生1的不同特征
    ​name = ‘egon’
    ​age = ‘79’
    sex = ‘female’
    stu1.name = 'egon'
    stu1.age = 79
    stu1.sex = 'female'
    print(stu1.__dict__)

    学生2的不同特征
    ​name = ‘bgon’
    age = ‘45’
    sex = ‘female’
    stu2.name = 'bgon'
    stu2.age = 45
    stu2.sex = 'female'
    print(stu2.__dict__)

    学生3的不同特征
    ​name = ‘cgon’
    age = ‘60’
    sex = ‘male’
    stu3.name = 'cgon'
    stu3.age = 60
    stu3.sex = 'male'
    print(stu3.__dict__)

    但是这样会有代码冗余问题
    为对象定制自己独有的特征

    class OldboyStudent:
    # 相同的特征
    school = 'oldboy'

    # 相同的技能
    def choose_course(self):
    print('choose course')

    stu1 = OldboyStudent()
    stu2 = OldboyStudent()
    stu3 = OldboyStudent()

    def init(obj,name,age,sex):
    obj.name = name
    obj.age = age
    obj.sex = sex
    #
    init(stu1.'egon',79,'female')
    init(stu2.'bgon',45,'female')
    init(stu3.'cgon',60,'male')


    print(stu1.__dict__)
    print(stu2.__dict__)
    print(stu3.__dict__ )


    简化方式2

    class OldboyStudent:
    # 相同的特征
    school = 'oldboy'

    def __init__(obj,name,age,sex):
    obj.name = name
    obj.age = age
    obj.sex = sex

    # 相同的技能
    def choose_course(self):
    print('choose course')

    # 调用类发生了
    # 1.产生了一个空对象,然后返回
    # 2.会触发类中__init__函数的执行

    stu1 = OldboyStudent('egon',79,'female')
    stu2 = OldboyStudent('bgon',45,'female')
    stu3 = OldboyStudent('cgon',60,'male')

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

    # 总结__init__函数的功能
    # 1.实在实例化时就为对象初始自己独有的特征
    # 注意点:__init__函数不能有返回值
    stu1.xxx = 111
    print(stu1.__dict__)



    class OldboyStudent:
    school = 'oldboy'
    def __init__(obj,name,age,sex):
    obj.name = name
    obj.age = age
    obj.sex = sex

    def choose_course(self):
    print('choose course')

    stu1 = OldboyStudent('egon',79,'female')

    先从对象自己的名称空间中,没有则去所属的类中查找

    类中定义的变量是所有对象共享的,类也可以来使用

  • 相关阅读:
    基于Struts1框架的简单工程搭建
    Struts jar包下载地址
    Spring jar包下载地址
    java中ResourceBundle和Locale的简单使用
    Java Timer和TimerTask的使用
    Eclipse中Java build path的使用
    Java中出现No enclosing instance of type XXX is accessible问题
    Django 学习笔记(七)数据库基本操作(增查改删)
    Django 学习笔记(六)MySQL配置
    Django 学习笔记(五)模板标签
  • 原文地址:https://www.cnblogs.com/dengyanchuan/p/10400933.html
Copyright © 2020-2023  润新知