面线对象之类与对象

一、面向对象:

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

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

二、类与对象:

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

定义:

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

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

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

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

2.面向对象的优缺点:

优点:

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

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

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

4.可维护性高。

缺点:

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

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

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

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

为什么要用面向对象:在当前很多程序都需要与用户直接打交道,用户需求千变万化,所以对扩展性要求特别高。

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

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

class  Penrson:

   name=‘盖伦’

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

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

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

属性查找:

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

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

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

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

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

可以通过 对象名.__dict__获取对象的所有属性,结果为字典型,但不包括类中的共享属性。

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

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

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

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

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

四、初始化函数:(@classmethod

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

对象一创建就应该进行初始化,所以最好的是将创建与初始化进行绑定。

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

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

1.为什么要把方法与对象进行绑定:对象本质上是存放数据的容器,所以实质是把这个数据容器与函数进行绑定,函数的作用是实现功能即处理数据得到结果。

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

2.绑定方法分为两种:

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

一种是绑定给类

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

当绑定给类时,默认将类本身当做参数传入,此时无论对象调用这个方法,还是类调用这个方法都不需要再将对象或类作为参数手动传参。

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

 

>>绑定给类:

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

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

 

绑定给对象时:

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

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

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

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

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

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

相同点:都会自动传值

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

不同点:1对象绑定方法在调用时,传入的是对象自己,而类绑定方法,传入的是类自己。

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

为什么要绑定:

简化代码,提高效率。

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

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

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

当功能不需要访问类的数据,也不访问对象的数据,就可以作为一个非绑定方法。

 obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常  ,如果在自己的名称空间中找到,即使变量名和类中的变量名相同,也只取自己名称空间中的值>>>>>在自己名称空间中访问到就不会再去其他空间访问,而且自己名称空间的访问顺序排在首位。

猜你喜欢

转载自www.cnblogs.com/yu-931017/p/10116208.html