一、基本理论
万物皆对象
对象是具体物体:拥有属性和行为
面向对象是面向过程的封装
成为包工头,进行指挥:把某些功能(属性和行为)安排给某一个对象,然后指挥对象工作。
类
某一个具体对象特征的抽象
组成
名称,属性,方法
作用
根据抽象的类,生产具体的对象
二、在Python中的实践
如何定义一个类?(例子)
class Moner: # 命名规则:大驼峰 pass# 经典类
根据这个类,创建(实例化)一个对象
one = Money()
属性、变量
二者区别
变量:可以改变的量值(全局变量和局部变量)
属性:属于某个对象的特征(只能通过对象来进行访问)
二者判定依据
是否存在宿主
对象属性
增
# 1、定义一个类class Person: pass# 2、根据这个类,创建一个对象p = Person()# 3、给p对象,增加一些属性p.age = 18p.height = 180# 4、验证是否添加成功print(p.age)print(p.__dict__) # 当前对象的所有属性——————————————————————————————————————18{'age': 18, 'height': 180}
查
print(p.age)print(p.__dict__) # 当前对象的所有属性——————————————————————————————————————18{'age': 18, 'height': 180}self pass
改
p.pets = ['小花','小黑']print(p.pets,id(p.pets))p.pets = [1,2]print(p.pets,id(p.pets))————————————————————————————['小花', '小黑'] 2081844979904[1,2] 2081844976192
地址开辟新路径
p.pets = ['小花','小黑']print(p.pets,id(p.pets))p.pets.append('小黄') # p.pets代表访问列表print(p.pets,id(p.pets))_____________________________['小花', '小黑'] 2352257853568['小花', '小黑', '小黄'] 2352257853568
地址不改变
删
del p.age
无用的值也会被删除,内存也会被释放掉
一个类可以产生多个不同的对象
类属性
万物皆对象,类也是一个对象
增
类名.类属性 = 值
在类中直接添加
class Person: age = 18Person.number = 1print(Person.number)print(Person.age)——————————————————————————————118
查
类名.类属性
对象.类属性
class Money: age = 18 count = 1 num = 666one = Money()print(one.age)print(one.count)print(one.num)——————————————————————181666
Python对象的属性查找机制:优先到对象自身去查找属性,如果没有找到,则根据__class__找到对象对应的类,到这个类里面查找
改
类名.类属性 = 值 若存在则为修改,不存在则为添加
对象.__class__.类属性 = 值
class Money: age = 18one = Money()print(one.age)one.__class__.age = 19print(Money.age)————————————————————————1819
不能用 对象.类属性=值,,这样会给对象添加属性
删
del 类名.属性
del 对象.__class__.属性
类属性的内存储问题
一般情况下,属性存储在__dict__的字典中,有些内置对象没有这个dict属性
一般对象的dict是可以修改的 方法:对象.__dict__={}
类的dict是只读的,默认无法修改 可以通过setattr方法修改
类属性对各个对象共享
类属性对象属性的限制
__slota__ = []列表中写上对象可以添加的属性
class Person: __slots__ = ['age'] passp1 = Person()p1.age = 18p1.num = 3print(p1.age)print(p1.num)
未完待续...