什么是面向对象:程序员
它是一种编程思想,是前辈总结出来的经验,知道程序员如何更好的编写程序,编程
核心是对象,程序就是一系列对象的集合,程序员经过负责调度这些对象让他们交互完成任务微信
相对于面向流程,就像流水线同样,亲自把制做手机的流程分红不少个小步骤,一一实现函数
面向对象,就像找到能管理流水线的人,让他负责流水线的运做oop
案例: 把大象装进冰箱?ui
面向过程:spa
1.拿起大象设计
2.打开冰箱对象
3.装入大象游戏
4.关闭冰箱
面向对象:
找到具有装大象技能的对象,装入大象
从面向过程到面向对象,程序员实现从一线流水工人到选拔流水工人的管理层进化,但要说明的是对象不是凭空产生的,须要咱们本身先设计,后调用.
其它案例:
西天取经:一个对象发生变化,并不影响其它对象,拓展性
曹操吟诗:对象能够重复的使用
1.扩展性,更方便的加入其它功能,QQ,微信
2.灵活性,能够随意的替换,西天取经
3.重用性,活字印刷相对于竹简能够重复利用,曹操吟诗
1.程序的复杂性提升,须要先定义一个个对象,以后再来调用,复杂性大幅提升
2.没法准确地预知结果,打游戏你很难知道哪一个英雄拿到最后的胜利点
关注的核心是流程,过程就是一步步执行流程的步骤,先作什么在作什么
优势:逻辑清晰,将复杂问题进行拆解简单化\流程化
缺点:扩展性差,可维护性差
使用场景:
面向流程通常面向程序员和系统硬件的程序,执行流程比较固定,对拓展性要求较低的,系统内核,计算器等
面向对象:直接面对终端用户,用户需求不断变化,因此对拓展性要求高,方便增删改查的程序,好比QQ,微信的
根据不一样的场景使用最合适的编程方式
这个是oop(面向对象)中最核心的两个概念
就是类型,类别,一种抽象概念,就是一系列具备相同特征和相同行为的对象的集合
就是一个实实在在的具体的某个事物,具有本身的特征和行为
对象就是特征和行为的结合体
类和对象的关系
类里面包含一系列的对象,对象属于某一个类
在生活中是前后对象后有类,而在程序中确实相反的,咱们须要先定义类,而后在再定义对象,由于咱们须要先告诉计算机这类的对象都有什么共同的特征和行为
总述:在使用面对对象编程时,第一步是思考须要什么样的对象,对象具有什么样的特征和技能,从而根据这些信息总结出须要的类型
定义类的语法
class 类的名称:
# 类中的内容 描述属性和技能
# 描述属性用变量
# 描述技能用函数
# 类命名 书写规范 首先是见名知意 名称用大驼峰命名法
# 驼峰就是单词的首字母大写
class Student:
pass
stu = Student
print(stu) # <class '__main__.Student'>
属性能够写在类中,类中的属性,是全部对象共用的
属性也能够写在对象中,对象中的属性,是每一个对象独特的(不同的)
若是类和对象中,有一样的属性,先访问对象,若是没有再访问类
# 描述一个老师(包含,一个公共属性和一个独特属性)
class Teacher:
school = 'oldboy'
t1 = Teacher()
t1.name = 'ryan'
t1.age = 18
增长属性
对象变量名称.属性名称 = 属性值
删除属性
del 对象的变量名称.属性名称
修改
对象变量名.属性名 = 新属性值
查看属性:全部属性\类信息
print(对象.__dict__) 全部属性
print(对象.__class__) 访问类信息
print(Teacher.__dict__)
# {'__module__': '__main__', 'school': 'oldboy', '__
# dict__': <attribute '__dict__' of 'Teacher' objects>,
# '__weakref__': <attribute '__weakref__' of 'Teacher' objects>,
# '__doc__': None}
print(Teacher.__class__) # <class 'type'>
class Dog:
def __init__(self, kind, color, age):
self.kind = kind
self.color = color
self.age = age
d1 = Dog('牧羊犬', '黄白', '2')
d2 = Dog('哈士奇', '黑白', '1')
d3 = Dog('泰迪犬', '棕黄', '1')
# 注意:这个函数不能有任何返回值,只能是None,规定如此..
class Student:
school = "oldboy"
def __init__(self, name):
self.name = name
def say_hi(self):
print(f'hi,my name is {self.name}.')
stu = Student('ryan')
stu.say_hi() # hi,my name is ryan.
非绑定方法不重要
7.绑定方法与非绑定方法
6.初始化方法
5.属性的查找顺序
4.如何设计属性
3.如何建立类和对象
2.类和对象的概念
对比,面向过程的优缺点 以及使用场景
1.面向对象的概念
get是从文件中获取对象
save是将对象存储到文件中
例子:为学生类添加一个save方法 一个get方法
通常不经常使用,不如直接在外面定义一个函数
语法:@staticmethod
或者叫作静态方法,就是不须要类和对象的数据时
函数逻辑须要访问对象或者类中的数据时,就绑定给对象或者类
特殊之处:无论用类仍是对象调用,都会自动传入类自己,做为第一个参数
类绑定方法用@classmethod来装饰
而使用类名来调用,它就是一个普通函数,有几个参数传递就得传几个
使用对象调用该函数时,会自动传入对象自己,做为第一个参数
默认的类中使用的方法都是对象的绑定方法,特殊的地方就是:
对象的精髓就在于将获取数据的变量名和处理数据的函数功能融合在一块儿,因此咱们经过一个对象就得到数据并处理数据.
案例:狗的类别
功能:用户给对象赋初始值
特色2:会自动将对象做为第一个参数传入,参数名称为self(附:咱们能够吧self改为其余名字,可是不建议改)
特色1:当实例化对象时,会自动执行init方法
init叫作初始化方法,本质也是一个函数
属性的增删改查
属性的写法
建立对象的语法