在面向对象之前,接触到面向过程式编程和函数式编程,它们很容易造成代码冗余,面向对象式编程能使代码的结构更加清晰化,可读性更高
面向过程编程 vs 函数式编程 vs 面向对象式编程
区别:
面向过程式编程:重复代码过多,可读性比较差
函数式编程: 函数名要有可识别性
面向对象的优势:1,类是一组相似功能的集合体,使组织结构更加清晰和规范化
2,要有上帝的思维,用面向对象设计程序,类是一个公共模板,对象去操作和使用这个模板
函数式编程:(每个函数之间都没有联系)
def login(): pass def register(): pass def check_user(): pass def check_account(): pass def save(): pass def check_flow_account(): pass 面向对象式编程: 组织结构更加清晰 class Auth: def login(): pass def register(): pass def check_user(): pass class Account: def check_account(): pass def save(): pass def check_flow_account(): pass
什么是类?
类是具有相似功能和属性的一类事物,功能为动,属性为静
什么是对象?
对象是类的具体体现,具体到一个
类的结构:
class Human(类名首字母大写):
# 第一部分:静态属性,属性,变量,静态字段
mind = '有思想'
language = '使用语言'
shape_list = ['四肢','五官']
# 第二部分:动态属性,方法,函数
def work(self):
print('都会工作')
def eat(self):
print('都需要吃饭')
如何使用?
类:
对属性的操作:
1.查看类中的所有内容: print(类名.__dict__),通过__dict__只是能查询,不能进行增删改
2.万能的点 . (类名+ . 的方式)
增: 类名.属性名 = '属性值'
删: del 类名.属性名
改: 类名.已有属性名 = '新的属性值'
查: print(类名.属性名)
3.类中的动态方法,(除静态方法,类方法)一般不用类名去执行类中的方法
通过对象去使用,类名+(),实例化过程,实例化一个对象
实例化对象的过程:
1.在内存中开辟一个新的空间
2.默认执行__init__方法,并把对象空间传给self
3.在__init__方法中,给对象空间封装一些属性
对象:
1.对象查看对象空间中的所有属性:print(对象 + __dict__)
2.对象操作对象空间的属性: 万能的点 .
增: 对象名 + 属性名 = 属性值(类的外面)
删: del 对象名.属性名
改: 对象名.已有属性名 = 属性值
3.对象查看类中的静态属性:print(对象 + 属性名),只能查看,不能更改
实例化对象可以使用公共模板的属性,但不能进行修改
4.对象调用类中的方法: 对象名.类中的方法
对象执行类中的方法,会把对象空间自动传给方法中的self参数
给对象封装属性
1.在__init__中,__init__(self,name,age):
2.在类的外面: 对象名.属性名
3.在类的其他方法中:
class A:
def __init__(self,name,age):
self.name = name
self.age = age
def func(self,sex): 可以写为固定的,也可以传递一个参数
self.sex = sex
obj = A('小胖',18)
obj.func('男') obj对象空间传给self
给类添加属性
类的外部: 类名.属性名 = 属性值
类的方法内: 类名.属性名 = 属性值
通过对象: 对象名.方法名执行方法
类名调用方法与对象调用方法达到一样的效果:
类名.方法名(对象)
对象查找属性的顺序: 对象空间 --> 类空间 --> 父类空间 --> ......
类名查找属性的顺序: 本类空间 --> 父类空间 --> ......