基本理论

什么是对象?
万物皆对象,对象是具体物体。(拥有属性、拥有行为。把很多零散的东西,封装成为一个整体)

Python是一门特别彻底的面向对象编程(oop)的语言
其他语言:并非全是对象类型,还存在基本数据类型。
Python语言:全部都是对象类型,所有值都是对象

面向过程&面向对象

都是一种解决问题的思路
面向过程:在解决问题时,关注的是解决问题的每一个过程(步骤:第一步:打开冰箱,第二放入大象。。。)
面向对象:在解决问题时,关注的是解决问题所需要的对象

例子:做好饭后洗碗
面向过程:洗菜-点火倒油-放菜-翻炒-。。【施工者】
面向对象:你 – 对象(对象会技能做饭,会洗碗),对象-- 自动炒菜机(炒菜)
“你”所做的是调度安排,而不是做事【调度者】

总结

面向对象和面向过程都是解决问题的一种方式。面向对象本身是面对过程的封装。

面向过程编程最重要的是什么?—按照步骤划分,把任务划分成每个步骤
面向对象最重要的是什么?–按照功能对对象进行划分,找到对象,确定对象属性和行为
如何面向对象?1,列举具体实现步骤 2,分离这些步骤中的功能代码块 3,将这些功能代码块划分到某一对象中 4,根据这个对象以及对应的行为,抽象出对应的类

定义:某个具体对象特征的抽象

python 面向对象 创建类 python面向对象项目_python 面向对象 创建类


类的作用?

根据抽象的类,生产具体的对象

属性&行为

python 面向对象 创建类 python面向对象项目_python 面向对象 创建类_02


类是抽象的。由类产生具体对象后,对象才拥有具体的属性值和方法实现

例子:类:钱 对象:具体的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 _
注意:不同对象之间是不能访问对方的属性