面向对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
面向过程
核心是过程,过程指的是问题的解决步骤,即先干什么再干什么,基于面向过程去设计程序就好比设计一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化,进而简单化
缺点:可扩展性差
面向对象
核心是对象,对象就是特征与技能的结合体,如果把设计程序比喻成创造一个世界,那你就是这个世界的上帝,与面向过程对机械流水线的模拟形成鲜明的对比,
面向对象更加注重的是对现实世界的模拟
优点:可扩展性高
缺点:极易出现过度设计
类
一系列对象相似的特征与技能的结合体
在现实世界中,先有一个个具体存在的对象,随着发展,总结相似之处,得到现实中的类
在程序中,一定是先定义类,后调用类来产生对象
第一阶段:由现实中的对象,总结出现实中的类
obj1:
特征
学校=oldboy
名字=李
年龄=18
性别=女
技能
学习
吃饭
obj2:
特征
学校=oldboy
名字=张
年龄=28
性别=男
技能
学习
吃饭
obj3:
特征
学校=oldboy
名字=牛
年龄=18
性别=女
技能
学习
吃饭
类就是现实中的老男孩学生类:
相似的特征
学校=oldboy
相似的技能
学习
吃饭
第二阶段:程序中的类产生程序中的对象
class OldboyStudent: # 定义了类,类体中的代码在类定义阶段就会执行
school = ‘oldboy‘ # 特征 ,类的数据属性
def learn(self): # 技能,类的函数属性
print(‘is learning‘)
def eat(self):
print(‘is eating‘)
print(OldboyStudent.__dict__) # 查看类的 名称空间(用来存放类中的变量名和函数名)
#通过字典访问里面的属性
print(OldboyStudent.__dict__[‘school‘])
print(OldboyStudent.__dict__[‘learn‘])
#python提供了访问属性的语法
print(OldboyStudent.school)
print(OldboyStudent.learn)
OldboyStudent.learn(123)
#新增属性
OldboyStudent.x=11111
OldboyStudent.school=‘Oldboy‘
print(OldboyStudent.__dict__)
#删除属性
del OldboyStudent.school
print(OldboyStudent.__dict__)
对象
如何产生程序中的对象?类名加括号,调用类,产生一个该类的实际存在的对象,该过程称为实例化,产生的结果又可以称为实例
obj1=OldboyStudent()
obj2=OldboyStudent()
obj3=OldboyStudent()
产生了3个相同的对象,因为并没有使用__init__()
class OldboyStudent:
school = ‘oldboy‘
def __init__(self,name,age,sex): # 只在实例化的时候执行,在对象产生之后才会执行
if not isinstance(name,str):
raise TypeError(‘名字必须是字符串类型‘)
self.name=name
self.age=age
self.sex=sex
def learn(self):
print(‘%s is learning‘ % self.name)
def eat(self):
print(‘is eating‘)
obj1=OldboyStudent(‘李‘,18,‘女‘)
#两步:1.先生成一个空对象 2.连同空对象和后面的三个参数,组成一组(obj1,‘李‘,18,‘女‘)传给__init__(),相当于 OldboyStudent.__init__(obj1,‘李‘,18,‘女‘)
print(obj1.name) # obj1.__dict__[‘name‘]
obj1.name=‘网‘
print(obj1.name)
print(obj1.school,id(obj1.school))
print(obj2.school,id(obj2.school))
print(obj3.school,id(obj3.school))
print(OldboyStudent.school,id(OldboyStudent.school))
#以上4个完全相同,就是同一个
#对象可以访问类的数据属性,类的数据属性是共享给所有对象使用的,id都一样
#类的函数属性
OldboyStudent.learn(obj1)
print(obj1.learn) #绑定方法
print(OldboyStudent.learn) # 函数属性
obj1.learn() # OldboyStudent.learn(obj1)
#绑定方法的特殊之处在于,绑定给谁,就由谁来调用,谁来调用,就把谁当作第一个参数传入
统计
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章