1、面向对象:编程
面向对象是一种编程思想,即编写代码的方式方法。微信
OOP(Object Oriented Programing)将程序看作是一堆对象的集合,实现功能的方式就是对象之间交互来实现。函数
2、类与对象:spa
1.面向对象思想中最核心的概念就是:对象与类。对象
定义:游戏
什么是对象:一切皆对象,对象指的是具有某些特征和技能的集合体,是实实在在的存在的具体物体(个人手机是对象,手机不是对象是一个类)。内存
什么是类:(类别,分类)类是一个抽象概念,是根据一些列具有相同特征和技能的对象抽取获得的,好比说人类、鸟、花。经过类就能知道一个对象的特征。it
类与对象的关系:类包含了一些列相同特征和技能的对象,对象是属于类的实例。模板
在程序中是:先有类,才能经过类来产生对象,要先肯定对象具有什么特征和什么行为才能产生对象。class
2.面向对象的优缺点:
优势:
1.不用考虑繁琐的实现步骤,(从一个操做工,变成了老板);
2.扩展性高,当须要一个新功能时,搞一个具有新功能的对象,命令它去完成任务;
3.各个对象之间耦合度较低,当一个对象出现了问题,不会对其余对象产生问题;
4.可维护性高。
缺点:
1.面向对象的复杂度比面向过程高。
2.没法预知执行结果,如王者荣耀的游戏,必定不能把过程写死,每一个英雄的行为是不固定的。
使用场景:须要较高的扩展性(直接与用户发生交互的程序对扩展性要求较高,如微信)
( 对于不须要扩展的程序而言,使用面向对象会增长复杂度。)
为何要用面向对象:在当前不少程序都须要与用户直接打交道,用户需求变幻无穷,因此对扩展性要求特别高。
面向对象的本质:使用不一样的对象来完成任务。
3、定义一个类:关键字class,+类名
class Penrson:
name=‘盖伦’
类名的定义规范:类名要按照驼峰体书写,如ThisIsPerson,即单词首字母大写。
如何获得一个对象:先定义一个类,在调用这个类并赋值给一个对象,就获得了一个对象。
访问对象的属性:用对象加点缀。
属性查找:
类有两种属性:数据性和函数属性。
每个对象都对应着一个内存地址,在建立对象时,计算机会申请一个新的内存空间,并将对象中的内容存进去。因为name的值是申明在类中的,因此person1.name与person2.name的ID是相同的。
当全部对象的某个属性都相同时,放在类中。
当每一个对象的某个属性不相同时,放到对象中。
能够经过 对象名.__dict__获取对象的全部属性,结果为字典型,但不包括类中的共享属性。
经过 类名.__dict__获取类中包含的全部属性,包括类中定义的函数变量,函数等等信息。
当对象中属性不存在时,会去类中访问,若是对象中存在这个属性,会优先访问对象中的属性。即查找顺序为:先对象,后类。
当建立一个类、对象的时候 ,会产生一个名称空间,存储类、对象中名称与值得绑定关系。
类还有一个做用:就是做为对象的模板,全部属于该类的对象,都具有类中的公共内容。
即便类中,什么都不写,也存在一些自带的属性,是从父类中获得的。
4、初始化函数:(@classmethod)
定义一个函数,目的用于设置对象的属性,若是没有对象,这个函数就没有意义,也就是初始化函数与类是一个总体。
对象一建立就应该进行初始化,因此最好的是将建立与初始化进行绑定。
初始化函数使用内置函数__init__(self,其余属性参数),将该函数定义在类中,会在调用类时自动执行,(不须要调用__inint__,能自动执行。)self参数必须有,表示要进行初始化对象,系统会自动传值。
5、绑定方法:是把对象与函数进行绑定。
1.为何要把方法与对象进行绑定:对象本质上是存放数据的容器,因此实质是把这个数据容器与函数进行绑定,函数的做用是实现功能即处理数据获得结果。
只要拿到了对象,就等同于拿到了数据和方法。(对象能够查找类的属性,包括数据属性和函数属性)
2.绑定方法分为两种:
一种是绑定给对象(默认)
一种是绑定给类
全部定义在类中的函数的共同点是都含有一个参数,看绑定方式的不一样,参数分别是类,和对象。
当绑定给类时,默认将类自己当作参数传入,此时不管对象调用这个方法,仍是类调用这个方法都不须要再将对象或类做为参数手动传参。
当方法绑定给对象时,默认是将对象做为参数传入,此时对象在调用该方式时,不须要手动传参,可是类在调用时,须要手动传参。
>>绑定给类:
绑定给类时:对象和类都能直接调用这个方法,都不须要手动将对象做为参数添加到方法函数中,可是会默认自动添加(不是不添加,而是自动添加)。
>>绑定给对象:默认状况下,类中函数(方法)都是绑定给
绑定给对象时:
1.当用对象来调用类中的方法时:默认会把对象传入方法中,不须要手动添加。
2.当用类来调用时:则须要手动传入对象,即调用这个方法时,需将对象做为参数传入。
一个方法到底应该绑定给对象仍是绑定给类?
当要处理的数据包含在类中时,就应该绑定给类。
当要处理的数据包含在一个对象中时,就应该绑定给对象。
类的绑定方法与对象的绑定方法:
相同点:都会自动传值
均可以被类和对象调用(只不过传参方式不一样,一个须要手动传参)
不一样点:1对象绑定方法在调用时,传入的是对象本身,而类绑定方法,传入的是类本身。
2第一个参数,一个cls一个叫self。
为何要绑定:
简化代码,提升效率。
6、非绑定方法:@staticmethod(静态)
在类中,既不绑定给类,也不绑定给对象,此时不在有默认参数
特色:不会自动传参,类和对象都能调用
当功能不须要访问类的数据,也不访问对象的数据,就能够做为一个非绑定方法。
在obj.name会先从obj本身的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常 ,若是在本身的名称空间中找到,即便变量名和类中的变量名相同,也只取本身名称空间中的值>>>>>在本身名称空间中访问到就不会再去其余空间访问,并且本身名称空间的访问顺序排在首位。