面向过程、面向对象、类
面向过程
面向过程的核心就是过程二字,即是先干什么,再干什么,最后干什么,就是机械式的思维方式
例:
#以注册功能为例:
1.接受用户名和密码
2.做逻辑处理,验证参数
3.把数据写入到文件里
优点:复杂的问题简单化,进而流程化
缺点:扩展性差,牵一发而动全身
使用场景:对扩展性要求不高的地方,一般使用面向过程
面向对象
面向对象的核心就是"对象"二字
1.在生活中:
对象就是"特征"与"技能"的结合体
2.在程序中:
对象就是盛放数据"属性"和"方法"的结合体
# 属性: 简单理解就是变量
# 方法:简单理解就是函数,或者叫功能
优点:扩展性强
缺点:编程复杂度变高了
使用场景:一般用在对拓展性要求较高的地方
类的定义和对象的产生
对象是特征与技能的结合体
类就是一系列相似的特征和相似的技能的结合体
class aaa(): # class下的子模块构成一个类
a = 'aa' # a就是一个属性
def bbb(): # bbb就是方法
pass
定义类时发生的事情:
1.类一旦被定义,会立马执行类体代码
2.类一旦定义完成,会产生类的名称空间,它会把类的名字都丢到类的名称空间去
3.会把类的名称空间绑定给__dict__属性,如何查看:类名.__dict__
产生对象、调用类
在程序中先定义类,然后调用类产生对象。调用类就是 类名()
每一次调用类,都会产生一个对象,并且产生的对象之间是互相独立的,互不影响的。
__init__方法,调用类会自动把对象当成第一个参数传给self
class Games: is_type = 'hero' def __init__(self, name, wqe, mp, hp): self.name = name self.wqe = wqe self.mp = mp self.hp = hp hero1 = Games('瑶瑶公主', 162, 440, 2587) # 产生对象,就是调用一个类的结果 print(hero1) # <__main__.Games object at 0x0000017F416C5A90>对象的内存地址 print(hero1.__dict__)
# {'name': '瑶瑶公主', 'wqe': 162, 'mp': 440, 'hp': 2587},如果没有__init__函数的话就是一个空字典{}
同一个类产生对象中独有的属性
调用同一个类,通过传递不同数值,使产生的对象内存储独有的属性
我们在类里定义一个名字__init__的方法,然后用这个方法接收传入的参数,然后产生属性
class Games: is_type = 'hero' def __init__(self, name, wqe, mp, hp): # 形参 self.name = name # 前面的name是所产生字典中的key值 self.wqe = wqe # 后面的是传入形参所对应的值 self.mp = mp self.hp = hp hero1 = Games('瑶瑶公主', 162, 440, 2587) hero2 = Games('飞飞公主', 153, 100, 3440) print(hero2.__dict__) # {'name': '飞飞公主', 'wqe': 153, 'mp': 100, 'hp': 3440} print(hero1.__dict__) # {'name': '瑶瑶公主', 'wqe': 162, 'mp': 440, 'hp': 2587}
名字的查找顺序
属性的分类
1.类属性
在类里面定义的属性就是类属性
类属性的增删改查:
就是通过 类名.类属性 进行
class Games: is_type = 'hero' def __init__(self, name, hp): self.name = name self.hp = hp hero1 = Games('瑶瑶公主', 2587) # 查 print(Games.is_type) # hero # 增 Games.x = '装备' print(Games.__dict__) # {'__module__': '__main__', 'is_type': 'hero', ..., 'x': '装备'} # 改 Games.x = '铭文' print(Games.__dict__) # {'__module__': '__main__', 'is_type': 'hero', ..., 'x': '铭文'} # 删 del Games.x print(Games.__dict__) # {'__module__': '__main__', 'is_type': 'hero', ...}
2.对象属性
在方法里定义的属性,并通过传参获得的独有属性
对象属性的增删改查:
就是通过 对象.对象属性 进行
如果在对象属性里面找不到,就会去类属性里面找,如果类属性里也没有,则会报错
class Games: is_type = 'hero' def __init__(self, name, hp): self.name = name self.hp = hp hero1 = Games('瑶瑶公主', 2587) # 查 print(hero1.name) # 瑶瑶公主 # 增 hero1.mp = 440 print(hero1.__dict__) # {'name': '瑶瑶公主', 'hp': 2587, 'mp': 440} # 改 hero1.mp = 400 print(hero1.__dict__) # {'name': '瑶瑶公主', 'hp': 2587, 'mp': 400} # 删 del hero1.mp print(hero1.__dict__) # {'name': '瑶瑶公主', 'hp': 2587}