面向过程:
像流水线炒菜一样一步一步来,先洗,再切,然后放油、葱姜蒜、主材、各种调料。
虽然也可以事先把各种材料都准备好(写函数),可最后还是不能先放主材再放油(步骤不能乱)。
优点是 过程清楚,一步一步来就行,
缺点是 修改太麻烦,一个小功能可能就要全局修改(数据、参数调用涉及多个函数和流程)
函数与对象:
函数:某种功能的实现过程
对象:某些数据和功能的结合体,共同实现某些功能
面向对象:
对象:具有某种特征(数据)和功能(方法)的集合
类: 某些具有相似特征和功能的多个对象的合集
优点:扩展性强,可维护性强
缺点:复杂度高,难度大
类与对象的生产顺序:
程序中:先有类,后有对象;先定义类的共有属性和方法,后产生对象的不同属性和方法
生活中:先有对象,后有类。
定义类:
class 类名():
print('This is a class')
1、类被定义后,会立即执行
2、产生一个命名空间,生成相应的数据和方法
3、把类的名称空间,绑定给__dict__ , 类.__dict__可以查看类所拥有的各种属性
**类和对象,都是一个大字典
4、类名一般首字母大字
例:
class Student():
shool = 'SH' # 共有属性
def choose_course(stu_dict,course): # 定义一种功能
stu_dict['course'] = course
print('%s成功选择了%s课程'%(stu_dict['course'],course))
给对象定制独有的属性:
class Student():
shool = 'SH' # 这个还是共有的
def __init__(self,name,age,gender,course=None): # 实例化对象时,生成对象属性和方法
if course == None:
course = []
self.name = name
self.age = age
self.gender = gender
self.course = course
实例化一个对象时:
1、产生一个命名空间
2、在命名空间中产生一个空对象(大字典,)
3、调用类的__dict__(或__init__功能)(self,name,age,gender等属性和方法)
4、把空对象绑定一个对象名,得到一个初始化了的结果。
例:
stu = Student('ly',18,'男')
属性的查找顺序:
先找自己的,自己的没有再找共同的,
比如shool,stu没有自己的shool,那么就会去找Student里面的shool
就像函数的局部命名空间中没有某个变量的值,就会去上一层函数或者全局中找一样
属性的增、删、改、查:
类的:类名.属性
增:
Student.country = 'China'
删:
del Student.country
改:
Student.shool = 'BJ'
查:
print(Student.shool)
实例化对象的:对象名.属性
增:
stu.country = 'China'
删:
del stu.country
改:
stu.name = 'Jason'
查:
print(stu.name)
方法的调用:
类中的方法,类和对象都可以调用,推荐使用对象来调用
类调用:类名.方法(参数)
对象调用:对象名.方法(参数)
if isinstance(stu,Student):
print("I`m a student")
else:
print('I`m not a student')