面线对象之类与对象

1、面向对象:编程

面向对象是一种编程思想,即编写代码的方式方法。微信

OOP(Object Oriented Programing)将程序看作是一堆对象的集合,实现功能的方式就是对象之间交互来实现。函数

 

2、类与对象:spa

1.面向对象思想中最核心的概念就是:对象与类。对象

定义:游戏

什么是对象:一切皆对象,对象指的是具有某些特征和技能的集合体,是实实在在的存在的具体物体(个人手机是对象,手机不是对象是一个类)。内存

什么是类:(类别,分类)类是一个抽象概念,是根据一些列具有相同特征和技能的对象抽取获得的,好比说人类、鸟、花。经过类就能知道一个对象的特征。it

类与对象的关系:类包含了一些列相同特征和技能的对象,对象是属于类的实例。模板

在程序中是:先有类,才能经过类来产生对象,要先肯定对象具有什么特征和什么行为才能产生对象。class

 

2.面向对象的优缺点:

优势:

1.不用考虑繁琐的实现步骤,(从一个操做工,变成了老板);

2.扩展性高,当须要一个新功能时,搞一个具有新功能的对象,命令它去完成任务;

3.各个对象之间耦合度较低,当一个对象出现了问题,不会对其余对象产生问题;

4.可维护性高。

缺点:

1.面向对象的复杂度比面向过程高。

2.没法预知执行结果,如王者荣耀的游戏,必定不能把过程写死,每一个英雄的行为是不固定的。

使用场景:须要较高的扩展性(直接与用户发生交互的程序对扩展性要求较高,如微信)

  对于不须要扩展的程序而言,使用面向对象会增长复杂度。)

 

为何要用面向对象:在当前不少程序都须要与用户直接打交道,用户需求变幻无穷,因此对扩展性要求特别高。

 

面向对象的本质:使用不一样的对象来完成任务。

 

 

 

3、定义一个类:关键字class+类名

class  Penrson:

   name=‘盖伦’

类名的定义规范:类名要按照驼峰体书写,如ThisIsPerson,即单词首字母大写。

 

如何获得一个对象:先定义一个类,在调用这个类并赋值给一个对象,就获得了一个对象。

 

访问对象的属性:用对象加点缀。

属性查找:

类有两种属性:数据性和函数属性。

  1. 类的数据属性是全部对象共享的。(全部对象共享的属性的id是相同的)
  2. 类的函数属性是绑定给对象用的。

 

每个对象都对应着一个内存地址,在建立对象时,计算机会申请一个新的内存空间,并将对象中的内容存进去。因为name的值是申明在类中的,因此person1.nameperson2.nameID是相同的。

 

当全部对象的某个属性都相同时,放在类中。

当每一个对象的某个属性不相同时,放到对象中。

 

能够经过 对象名.__dict__获取对象的全部属性,结果为字典型,但不包括类中的共享属性。

经过 类名.__dict__获取类中包含的全部属性,包括类中定义的函数变量,函数等等信息。

 

当对象中属性不存在时,会去类中访问,若是对象中存在这个属性,会优先访问对象中的属性。即查找顺序为:先对象,后类。

 

当建立一个类、对象的时候 ,会产生一个名称空间,存储类、对象中名称与值得绑定关系。

 

类还有一个做用:就是做为对象的模板,全部属于该类的对象,都具有类中的公共内容。

 

即便类中,什么都不写,也存在一些自带的属性,是从父类中获得的。

 

 

4、初始化函数:(@classmethod

定义一个函数,目的用于设置对象的属性,若是没有对象,这个函数就没有意义,也就是初始化函数与类是一个总体。

对象一建立就应该进行初始化,因此最好的是将建立与初始化进行绑定。

 

初始化函数使用内置函数__init__self,其余属性参数),将该函数定义在类中,会在调用类时自动执行,(不须要调用__inint__,能自动执行。)self参数必须有,表示要进行初始化对象,系统会自动传值。

 

 

5、绑定方法:是把对象与函数进行绑定。

1.为何要把方法与对象进行绑定:对象本质上是存放数据的容器,因此实质是把这个数据容器与函数进行绑定,函数的做用是实现功能即处理数据获得结果。

只要拿到了对象,就等同于拿到了数据和方法。(对象能够查找类的属性,包括数据属性和函数属性)

 

 

 

2.绑定方法分为两种:

一种是绑定给对象(默认)

一种是绑定给类

 

全部定义在类中的函数的共同点是都含有一个参数,看绑定方式的不一样,参数分别是类,和对象。

当绑定给类时,默认将类自己当作参数传入,此时不管对象调用这个方法,仍是类调用这个方法都不须要再将对象或类做为参数手动传参。

当方法绑定给对象时,默认是将对象做为参数传入,此时对象在调用该方式时,不须要手动传参,可是类在调用时,须要手动传参。

 

>>绑定给类:

 

绑定给类时:对象和类都能直接调用这个方法,都不须要手动将对象做为参数添加到方法函数中,可是会默认自动添加(不是不添加,而是自动添加)。

 

>>绑定给对象:默认状况下,类中函数(方法)都是绑定给

 

绑定给对象时:

1.当用对象来调用类中的方法时:默认会把对象传入方法中,不须要手动添加。

 

2.当用类来调用时:则须要手动传入对象,即调用这个方法时,需将对象做为参数传入。

 

 

一个方法到底应该绑定给对象仍是绑定给类?

   当要处理的数据包含在类中时,就应该绑定给类。

   当要处理的数据包含在一个对象中时,就应该绑定给对象。

 

类的绑定方法与对象的绑定方法:

相同点:都会自动传值

均可以被类和对象调用(只不过传参方式不一样,一个须要手动传参)

不一样点:1对象绑定方法在调用时,传入的是对象本身,而类绑定方法,传入的是类本身。

        2第一个参数,一个cls一个叫self

 

为何要绑定:

 

简化代码,提升效率。

 

 

 

6、非绑定方法:@staticmethod(静态)

在类中,既不绑定给类,也不绑定给对象,此时不在有默认参数

特色:不会自动传参,类和对象都能调用

当功能不须要访问类的数据,也不访问对象的数据,就能够做为一个非绑定方法。

 

 obj.name会先从obj本身的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常  ,若是在本身的名称空间中找到,即便变量名和类中的变量名相同,也只取本身名称空间中的值>>>>>在本身名称空间中访问到就不会再去其余空间访问,并且本身名称空间的访问顺序排在首位。

相关文章
相关标签/搜索