面向对象知识的整理
发布日期:2021-08-16 20:25:38 浏览次数:4 分类:技术文章

本文共 3174 字,大约阅读时间需要 10 分钟。

    

      面向对象在Python中占有很重要的分量,如果不理解面向对象的相关内容,那么对后面的学习就会犯糊涂。当初开始学习的时候总感觉面向对象很难理解,可能当初选择的书籍不太正确(当初直接看《Python学习手册》,原以为厚的书都是讲得比较清楚的,但是后来才发现里面的知识结构挺混乱的而且有很多知识点重复,显得有点啰嗦,重点不突出,导致学得很糊涂,所以建议新手不要选择这本书作为入门书籍!),但是在掌握一定知识再看这本书反而收益很多,特别是28章的内容,以例子的形式讲解了类的实际过程,里面的设计更加多的体现了代码的可维护性,真是收益良多!不过看这本书还是有相关的面向对象知识,才可以很好的掌握这本书中有关面向对象的知识和原理!如下是整理一些博客的内容,人家已经整理的很好了,我也算是“马后炮”了,加上一些自己的东西!

      现在各种编程语言的编程范式基本是分两类,一是面向对象,二是面向过程。一般人对于面向过程的即使基本都是以流程为执行过程,以将大问题变成小问题为设计思路的来解释,但是面向过程的缺点对比于面向对象而言就显而易见了,面向对象不利于后期的维护。当你要对程序进行修改,那意味着对你修改的那部分有依赖的各个部分你都也要跟着修改。但是如果你只是去做某些一次性任务的时候,用面向过程的方式是极好的,但对于你要处理的是复杂的任务,且需要不断迭代和维护 的, 那还是用面向对象最方便。那面向对象的的好处是什么?首先程序的维护和扩展变得更简单,代码的重用性更佳,并且可以大幅度地提高程序开发效率,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑。 相比于面向过程而言,面向对象在设计的时候在某种程度上地减低了数据的出错率!

     在Python中面向对象的三大特性:继承,多态,封装!其中多态就是常说中Python的“鸭子类型”语言,而封装就是类中包含着数据和方法,创建对象直接调用内种类中的方法就可以了。还要注意一点的就是,多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。面向对象核心的问题:数据的存储问题,数据的空间分布,数据的传递问题(引用)!

      明白Python的类要注意这以下问题:

  1. 当你实例化时python会自动把这个实例本身通过self参数传进去(对象指针的形式),相当于这个参数已经该出了。__init__(self,xxx)方法,相当于类.__init__(实例化对象,xxx)
  2.  __init__()叫做初始化方法(或构造方法)在类被调用时,这个方法(虽然它是函数形式,但在类中就不叫函数了,叫方法)会自动执行,进行一些初始化的动作。总结:其实上述就是封装,其实就是使用构造方法将内容封装到某个具体对象中,然后通过对象直接或者self间接获取被封装的内容。
  3.  继承概念的实现方式主要有2类实现继承和接口继承
  •               实现继承是指使用基类的属性和方法而无需额外编码的能力;
  •               接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法);
  •               所以OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实                         例进行设计和实现几个阶段。

 

面向对象类中由于不同的版本导致了不同类的继承收索,而最直接的影响就是类的类型了,当然这里的跟家值得注意的是类的一些特性也随着改变如特性,多继承等等!两者的不同(经典类:深度优先和新式类:广度优先。)

 

类的一些重要知识:成员、成员修饰符、特殊成员等!

类成员包括字段、方法、属性,如下一一简要介绍。

字段

     字段主要分为普通字段和静态字段,两者的访问方式不同,静态字段属于类,普通字段属于对象(self), 最本质的区别是内存中保存的位置不同,因而普通字段在每一个对象都要创建一份,而静态字段就是在内存中保存着一份,只是通过对象指针引用就可以了!应使用思路: 通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段。但是要通过类才可以访问的而不是对象进行访问!

方法:

  • 方法:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
  • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self
  • 类方法:由调用; 至少一个cls参数;执行类方法时,自动将调用该方法的复制给cls
  • 静态方法:由调用;无默认参数;

    相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。

    不同点:方法调用者不同、调用方法时自动传入的参数不同。

属性:

定义时,在普通方法的基础上添加 @property 装饰器;

定义时,属性仅有一个self参数

调用时,无需括号

其中注意:

属性存在意义是:访问属性时可以制造出和访问字段完全相同的假象

属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能。

 属性的定义有两种方式:

装饰器 即:在方法上应用装饰器

装饰器方式:在类的普通方法上应用@property装饰器

这里要分为两种一种是新式类一种是经典类(只有一种方法)。

 新式类的好处:

  • 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法。
  • 由于新式类中具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除。

  静态字段 即:在类中定义值为property对象的静态字段(没有经典类和新式类的区分)

     property的构造方法中有个四个参数:

  • 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
  • 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
  • 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
  • 第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息

 

成员修饰符:

      每一个类的成员都有两种形式:

  • 公有成员,在任何地方都能访问
  • 私有成员,只有在类的内部才能方法

私有成员和公有成员的访问限制不同

静态字段

  • 公有静态字段:类可以访问;类内部可以访问;派生类中可以访问
  • 私有静态字段:仅类内部可以访问;

普通字段

  • 公有普通字段:对象可以访问;类内部可以访问;派生类中可以访问;
  • 私有普通字段:仅类内部可以访问;

总结一句话,私有成员只能够在类的内部进行访问方法同样原理!!

特殊成员特殊成员

__del__、__call__、 __str__、__getitem__、__setitem__、__delitem__、__getslice__、__setslice__、__delslice__、__iter__、__dict__(__dict__静态字段和方法)

类的检查方法如下:

isinstance(obj, cls)

检查是否obj是否是类 cls 的对象

class Foo(object):    pass obj = Foo() isinstance(obj, Foo)
View Code

 

issubclass(sub, super)

 检查sub类是否是 super 类的派生类

1 class Foo(object): 2  3     pass 4  5   6  7 class Bar(Foo): 8  9     pass10 11  12 13 issubclass(Bar, Foo)
View Code

 

 

      

转载于:https://www.cnblogs.com/yongliang/p/6405318.html

转载地址:https://blog.csdn.net/weixin_30823001/article/details/95790009 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:数组问题
下一篇:Spring 设值注入 构造注入 p命名空间注入

发表评论

最新留言

不错!
[***.144.177.141]2024年03月29日 01时25分48秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章