面向对象
面向对象编程是一种编程方式
除了这个,还有为了实现某些功能的面向过程编程
面向过程相比于面向对象
优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。
缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。
想要了解面向对象编程,就应该先了解对象是什么
对python来说,万物皆对象
举个例子,人类,把人归于一类,那么具体到某个人,这个人就是人这个类的对象
把一类东西的一些共有的抽象的东西摘出来,把有这些特定属性的东西归于一起就是一个类
而从这个类中找出一个指定的东西,也就是对象的过程就是实例化
面对对象编程:
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,
面向对象的程序一旦开始就由对象之间的交互解决问题,谁也无法预测最终结果。
现在用一段代码在具体认识一下类和对象
比如警察,小偷和平民 这三个都是人,可以归于人类
然后在从人身上抽象出属性,比如 每个人都有名字,都有年龄,都有性别,这些就是属性
class Human: #用class创建一个类,Human类(人类) def __init__(self,name,age,sex): #抽象的人的属性,名字,年龄,性别 self.name = name self.age = age self.sex = sexjingcha = Human('警察',35,'男') #这里就是实例化,创建一个警察,设定名字,年龄,性别xiaotou = Human('小偷',25,'女') #创建一个小偷,设定名字,年龄,性别pingmin = Human('平民',22,'女') #创建一个平民,设定名字,年龄,性别print(jingcha,'这个就是警察啦')print(xiaotou,'这个就是小偷啦')print(pingmin,'这个就是平民啦')
<__main__.Human object at 0x0000027E78BF82E8> 这个就是警察啦
<__main__.Human object at 0x0000027E78CBB978> 这个就是小偷啦<__main__.Human object at 0x0000027E78CA46D8> 这个就是平民啦运行后发现打印出的这串自己不认识怎么办,没关系儿,这些其实是内存地址,换种方式看看
print(jingcha.name) #查看他的名字print(jingcha.age) #查看他的年龄print(jingcha.sex) #查看他的性别
警察
35男这些被查看到的东西,就是这个对象的属性了,当然 你也不可能查看到一个他没有的属性
这些就是类 对象 属性 实例化
类中的方法
现在类和对象都已经有了,那么说这些对象能不能做些什么呢
比如警察可以抓小偷,小偷逃跑
class Police: #创建一个警察类 def __init__(self,name,age,sex): #属性有姓名,年龄,性别 self.name = name self.age = age self.sex = sex def attack(self,Thief): #创建一个方法,实现警察抓小偷 print('%s抓%s,%s被吓跑了,但是%s追了上去'%(self.name,Thief.name,Thief.name,self.name))class Thief: #创建一个小偷类 def __init__(self,name,age,sex): #属性有姓名,年龄,性别 self.name = name self.age = age self.sex = sexjing = Police('警',34,'男') #实例化一个警察tou = Thief('偷',23,'男') #实例化一个小偷jing.attack(tou) #用jing调用抓小偷方法,并把tou作为参数传进去
警抓偷,偷被吓跑了,但是警追了上去
这个就是类里的方法
同时也发现了
对象能做的:
查看属性
调用方法
类能做的:
实例化
创建方法