day_19面向对象基础

1、面向过程与面向对象编程思想

  • 面向过程编程:

    核心是“过程”二字,过程指的是做事情的步骤,即先做什么后做什么

    基于该编程思想编写程序,就好比一条流水线,一种机械式的思维方式

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

    缺点:可扩展性差

  • 面向对象编程:

    核心是“对象”二字,对象指的是特征与技能的结合体

    基于该编程思想编写程序,就好比在创建世界,一种上帝式的思维方式

    优点:可扩展性能高

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

2、类和对象

2.1 类和对象的关系

:具有某些相同属性或者技能的一类事物

对象/实例:具体的某一个事物,同一个类中的不同对象具有不同的属性,即各对象的独立属性

​ 在现实世界中,有对象之后才有类的概念,是人们总结归纳抽象化出来的概念

​ 而在程序中,先有类,后才有对象,通过调用类,实例化出来一个个的对象

2.2 类的定义

使用关键字class定义类,使用驼峰体命名类名

class Person:
    #	实例化的时候,实例对象的独立属性
    def __init__(self,name,age):
        self.name = name
        self.age = age
    #  该类对象的相同属性    
    role = 'person'  # 人的角色属性都是人,特征
    def walk(self):  # 人的技能之一,步行
        print('person in walking...')

2.2 对象:类的实例化

​ 通过调用类实例化对象,调用方式:类名(*args),括号内的参数为对象的独立属性,如:

person1 = Person('alex',18)

2.3 定义/调用(实例化)类发生的事情

  • 定义类:

    1、定义类时,会产生一个空的名称空间

    2、会把类内部所有名字,扔进类的名称空间中

    注意:执行python文件时,在类的定义阶段会执行类体代码,产生名称空间

  • 调用类:即实例化对象。

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

    2、会自动触发__init__()

    3、会把对象本身以及括号内的参数一并传给__init__()函数,产生对象的独立属性的名称

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

2.4 类的属性调用

  • 类调用类自身的属性:

    1、类调用类内部的函数只是调用普通函数

    2、类调用类内部的其他属性,可以查看,修改,增加对应的值

    print(Person.role)
    #  修改
    Person.role = 'god'
    print(Person.role)
    #  增加
    Person.name = 'xiaoxixi'
    print(Person.name)
    '''
    person
    god
    xiaoxixi'''
    
    #  删除
    del Person.role
    print(Person.role)  #报错:AttributeError: type object 'Person' has no attribute 'role'
    
  • 对象调用类的属性:

    1、对象调用属性时的查找顺序:

    先:对象自身的名称空间

    后:类的名称空间

    找不到就报错;对象调用类的相同属性时,只能取,不能修改

    2、对象调用类的函数:叫做对象的绑定方法

    会在自身对象的名称空间生成一个相同的函数方法,只不过这个函数方法的第一个参数绑定为当前的对象

    因此,不同的对象调用类的函数方法时,都会在自身的名称空间中生成一个名称,该名称指向绑定了自身对象后的函数,即该对象的绑定方法

    验证:

    person1 = Person('alex',18)
    person2 = Person('nick',19)
    print(person1.walk)  # 不加括号,查看函数对象的内存地址
    print(person2.walk)
    '''
    <bound method Person.walk of <__main__.Person object at 0x000001A7F4A8E3C8>>
    <bound method Person.walk of <__main__.Person object at 0x000001A7FD966B88>>'''
    
posted @ 2019-10-09 16:53  W文敏W  阅读(128)  评论(0编辑  收藏  举报