python之面向对象
面向对象
1、面向过程编程
1、面向过程是什么
面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式。
2、优缺点:
优点是:复杂度的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)
缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。
3、应用场景:
一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。
2、面向对象编程
1、什么是面向对象
面向对象的程序设计:核心是对象二字,对象是特征与技能的结合体,基于面向对象设计程序就好比在创造一个世界,你就是这个世界的上帝,存在的皆为对象,
不存在的也可以创造出来,与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界的模拟,是一种“上帝式”的思维方式。
2、优缺点
优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:编程复杂度高,
3、应用场景
需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方
3、类与对象
1、什么是类和对象
对象是特征与技能的结合体,
类则是一系列对象相似的特征与技能的结合体
2、先有类还是先有对象?
在现实生活中,先有对象,再有类,也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在
在程序中,必须先定义类,在调用类产生对象,这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,
后调用类,不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象
3、定义类,产生对象
定义类
class 类名():
pass
def 函数名():
pass
类名: 一般是首字母大写
class Student():
school = 'SH'
def choose_course(stu_dic, course):
stu_dic['courses'].append(course)
print("%s 选课成功 %s" % (stu_dic['name'], stu_dic['courses']))
类的名称空间
print(Student.__dict__)
造对象,调用类,产生对象
stu1 = Student() # 调用类 产生空对象
print(stu1.__dict__)
最终版本
class Student():
school = 'SH'
# 初始化方法
def __init__(stu_obj, name, age, gender, courses=[]):
stu_obj.name = name # stu1.__dict__['name'] = 'egon'
stu_obj.age = age # stu1.__dict__['age'] = 20
stu_obj.gender = gender # stu1.__dict__['gender'] = 'male'
stu_obj.courses = courses # stu1.__dict__['courses'] = []
def choose_course(stu_dic, course):
stu_dic['courses'].append(course)
print("%s 选课成功 %s" % (stu_dic['name'], stu_dic['courses']))
# 类的名称空间
print(Student.__dict__)
stu1 = Student('egon', 18 ,'male') #造出stu1这个对象
==》init(stu1, 'egon', 18, 'male')
print(stu1.__dict__)
ps:左边相当于右边的,一般尽量不用————什么————的,这个一般是内置方法
stu1.name = 'egon' # stu1.__dict__['name'] = 'egon'
stu1.age = 18 # stu1.__dict__['age'] = 20
stu1.gender = 'male' # stu1.__dict__['gender'] = 'male'
stu1.courses = [] # stu1.__dict__['courses'] = []
调用类的过程就是实例化, 得到的对象就是一个实例
4、属性查找
类有两种属性:数据属性和函数属性
1. 类的数据属性是所有对象共享的,但是,类中的方法是给对象用的, 并且,把对象自己当成第一个参数传递
2. 类的函数属性是绑定给对象用的
对象操作属性
点语法取值,先从自己对象中取,如果没有,在取类中取值

浙公网安备 33010602011771号