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>>'''