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

    Python 3 面向对象

    一、面向过程-->面向对象

    面向过程:根据业务逻辑从上到下堆叠代码,即先干什么再干什么,基于面向过程去设计程序就好比在设计一条流水线,是一种机械式的思维方式

    函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

    面向对象:对函数进行分类和封装,让开发”效率高更高,更快”

    面向对象优点:

    解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中

    面向对象缺点:

    1. 编程的复杂度远高于面向过程,不了解面向对象而立即上手基于它设计程序,极容易出现过度设计的问题
    2. 无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题

    面向对象应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

     类与对象

    面向对象编程是一种编程方式,此编程方式需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

    python中一切皆为对象,且python3统一了类与类型的概念,类型就是类

    类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

    那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看,在现实世界中:先有对象,再有类

    人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在

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

    这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象

    #第一阶段:现实中的对象----》现实中类
    
    obj1:
        特征
            学校=oldboy
            名字=李大炮
            年龄=18
            性别=女
        技能
            学习
            吃饭
    
    obj2:
        特征
            学校=oldboy
            名字=张全蛋
            年龄=28
            性别=男
        技能
            学习
            吃饭
    
    obj3:
        特征
            学校=oldboy
            名字=牛榴弹
            年龄=18
            性别=女
        技能
            学习
            吃饭
    
    现实中的老男孩学生类:
        相似的特征
            学校=oldboy
        相似的技能
            学习
            吃饭
    第二阶段:程序中的类----》程序中的对象
    
    class OldboyStudent:
        school = 'oldboy'  #类的数据属性
        def learn(self):   #类的函数属性
            print('is learning')
        def eat(self):
             print('is eating')
    #python为类内置的特殊属性
    类名.__name__# 类的名字(字符串)
    类名.__doc__# 类的文档字符串
    类名.__base__# 类的第一个父类(在讲继承时会讲)
    类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
    类名.__dict__# 类的字典属性
    类名.__module__# 类定义所在的模块
    类名.__class__# 实例对应的类(仅新式类中)
    类的特殊属性(了解即可)

    属性查找

    类有两种属性:数据属性和函数属性

    1. 类的数据属性是所有对象共享的

    2. 类的函数属性是绑定给对象用

    print(id(OldboyStudent.school))
    
    print(id(s1.school))
    print(id(s2.school))
    print(id(s3.school))
    
    '''
    4377347328
    4377347328
    '''
    
    
    
    #类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不一样
    #ps:id是python的实现机制,并不能真实反映内存地址,如果有内存地址,还是以内存地址为准
    print(OldboyStudent.learn)
    print(s1.learn)
    print(s2.learn)
    print(s3.learn)
    '''
    <function OldboyStudent.learn at 0x1021329d8>
    <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x1021466d8>>
    <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146710>>
    <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146748>>
    '''
    View Code

    在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

  • 相关阅读:
    Exercise02_09
    Exercise02_05
    Exercise02_01
    Exercise02_03
    Exercise02_07
    web.xml配置详解
    面对不成功的人生
    请不以结婚为目的的恋爱吧
    年轻人能为世界做点什么
    不作就不会活
  • 原文地址:https://www.cnblogs.com/qiangyuge/p/7368269.html
Copyright © 2011-2022 走看看