基本理论
什么是对象?
万物皆对象,对象是具体物体。(拥有属性、拥有行为。把很多零散的东西,封装成为一个整体)
Python是一门特别彻底的面向对象编程(oop)的语言
其他语言:并非全是对象类型,还存在基本数据类型。
Python语言:全部都是对象类型,所有值都是对象
面向过程&面向对象
都是一种解决问题的思路
面向过程:在解决问题时,关注的是解决问题的每一个过程(步骤:第一步:打开冰箱,第二放入大象。。。)
面向对象:在解决问题时,关注的是解决问题所需要的对象
例子:做好饭后洗碗
面向过程:洗菜-点火倒油-放菜-翻炒-。。【施工者】
面向对象:你 – 对象(对象会技能做饭,会洗碗),对象-- 自动炒菜机(炒菜)
“你”所做的是调度安排,而不是做事【调度者】
总结
面向对象和面向过程都是解决问题的一种方式。面向对象本身是面对过程的封装。
面向过程编程最重要的是什么?—按照步骤划分,把任务划分成每个步骤
面向对象最重要的是什么?–按照功能对对象进行划分,找到对象,确定对象属性和行为
如何面向对象?1,列举具体实现步骤 2,分离这些步骤中的功能代码块 3,将这些功能代码块划分到某一对象中 4,根据这个对象以及对应的行为,抽象出对应的类
类
定义:某个具体对象特征的抽象
类的作用?
根据抽象的类,生产具体的对象
属性&行为
类是抽象的。由类产生具体对象后,对象才拥有具体的属性值和方法实现
例子:类:钱 对象:具体的1毛,1块
类:汽车 对象:奥迪、比亚迪。。
类具体成对象,对象抽象成类
如何定义一个类?
class 类名:
pass
注意:关键词class 、没有括号,类名首字母大写
#定义函数
def run():
pass
#定义类
#有两类经典类 、新式类。下面形式属于经典类
class Money:
pass
#英文字母首字母需要大写
class Money:
pass
print(Money)
#输出:<class '__main__.Money'> class就是类,且类名是Money
#根据这个类,创建(实例化)一个对象
one = Money()
print(one)
print(Money)
#输出:<__main__.Money object at 0x000001A206C59EB0>
#Money object 类对象 ;0x000001A206C59EB0 内存地址
print(one.__class__)
#输出:<class '__main__.Money'> 输出它对象的类名
增加属性/行为的描述
属性 VS 变量?
定义:
变量:可以改变的量值
属性:基于某个对象的特征
访问权限:
变量:根据不同的位置,存在不同的访问权限(全局变量/局部变量)
属性:只能通过对象来进行访问
所以必须先找到对象,对象也是通过变量名来引用,既然是变量,也有对应的访问权限
判断依据:是否存在宿主。有即属性,没有即变量
对象属性
增删改查
增:直接通过对象,动态添加
p.age = 18
#1.定义一个类
class Person:
pass
#2.根据类,创建对象
p = Person()
#3.给对象p,添加一些属性
p.age = 18
p.height = 180
#4.验证是否有添加成功
#print(p.age) #输出18,即添加成功
#输出对象p的所有属性
print(p.__dict__) #输出:{'age': 18, 'height': 180}
p.age = 23 #再重新命名一次,就修改了
p.pets = ['小花','小黑']
print(p.pets,id(p.pets))
#输出:['小花', '小黑'] 2280659029696
p.pets = [1,2] #修改操作
print(p.pets,id(p.pets))
#输出:[1, 2] 2280661916992
#修改操作下,id地址是改变了的
p.pets = ['小花','小黑']
print(p.pets,id(p.pets))
#['小花', '小黑'] 2514722426688
p.pets.append('小米') #访问操作
print(p.pets,id(p.pets))
#['小花', '小黑', '小米'] 2514722426688
#访问操作不会改变ID地址
删除:del p.age
p.age = 18
del p.age
print(p.age) #已经删除了,不存在了再打印就会报错
如何查看对象的所有属性:对象._ dict _
注意:不同对象之间是不能访问对方的属性