面向过程:优点 复杂的问题流水话,进而简单化
缺点 一套流水线或者流程就是用来解决一个问题 不好改动
应用场景 一旦完成基本就很少改变的场景 ,著名的例子有Linx内核, git,以及Apache HTTPserver
面向对象 核心就是对象二字
优点 解决了程序的可扩展性,对某个对象单独修改,会立刻反应到整体,如对游戏中一个人物参数的特征和技能修改都很容易
缺点 容易过度设计
无法向面向过程的程序设计流水想式的可以很精确的预测问题的处理流程与结果,面向对象一旦开始就由对象之间交互解决问题,即使上帝也无法准确地预测结果于是我们经常看到对战类游戏新增一个游戏人物,在交战过程中极易出现阴霸的技能,一刀砍死三个人,这种情况就是无法准确预测的,只有对象之间交互才能准确地知道最终的结果
应用场景 需求经常变动的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方
面向对象的程序设计并不是全部,对于一个软件质量来说,面向对象的程序设计只是用来解决程序扩展性
类与对象
类即是类别,种类,是面向对象设计最重要的概念,对象的特征与技能的结合体,而类是一系列对象相似的特征与技能的结合体
在现实世界中 现有对象,再有类
在程序中 务必先保证先定义类,后产生对象
ps
1 在程序中特征用变量标识,技能用函数标识
2 因类中最常见的无非是 变量和函数的定义
程序中的类
class OldboyStudent:
school = 'oldboy'
def learn(self):
print('is learning)
def eat(self):
print('is learning')
def sleep(self):
print('is sleeping')
注意
1 类中可以有任意python代码,这些代码在类定义阶段便会执行
2 因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过OldboyStudent.__dict__查看
3 对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供了专门的.语法
4 点的访问属性的语法,类中定义的名字,都是类的属性
程序中类的用法
. 专门用来访问属性,本质操作的就是__dict__
OldboyStudent.school #等于经典类的操作OldboyStudent.__dict__['school']
OldboyStudent.school='Oldboy' #等于经典类的操作OldboyStudent.__dict__['school']='Oldboy'
OldboyStudent.x=1 #等于经典类的操作OldboyStudent.__dict__['x']=1
del OldboyStudent.x #等于经典类的操作OldboyStudent.__dict__.pop('x')
程序中的对象
调用类,或称为实例化,得到对象
s1 = OldboyStudent()
s2 = OldboyStudent()
s3 = OldboyStudent()
如此 s1 s2 s3 都一样了,而这三者除了属性之外还有各种不同的属性,这就用到了__init__
注意 该方法是在对象产生之后才执行的,只用来为对象进行初始化操作,可以有任意代码,但以订不能有返回值
class OldboyStudent:
....
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
.......
s1=OldboyStudent('马以财‘,’男‘,16) 先定义类产生空对象s1,然后调用OldboyStudent。__init__(s1,'马以财','男',16)
程序中对象的用法
执行__init__,s1.name=’马以财',很明显也会产生对象的名称空间
s1.__dict__
{'name':‘马以财’,'sex':'男’,'age':16}
s1.name s1.__dict__['name']
s1.name = '王大炮' s1.__dict__['name']='王大炮‘
del s1.name s1.__dict__.pop('name')
__init__的方法:
方式一 为对象初始化自己独有的特征
class People:
country='China'
x=1
def run(self):
print('---->',self)
实例化出三个对象
obj1=People()
obj2=People()
obj3=People()
为对象定制自己独特的特征
obj1.name='egon'
obj1.age=18
obj1.sex='male'
obj2.name='lxx'
obj2.age=38
'female'
obj3.name='alex'
obj3.age=38
obj3.sex='female'
print(obj1.__dict__)
print(Peple.__dict__)
方式二 为对象初始化自己独特的特征
class People:
country='China'
x=1
def run(self):
print('---->',self)