面向对象的一些理论表述,涉及知识的理解和内置方法

1 ,首先谈下面向对象的应用场景

    在平时敲代码开发程序过程中,往往会遇到一些比如设计一套系统,功能比较多,代码量又很庞大的,并且,要实现的需求中还要处理很复杂的各种角色或者功能的关系时,就要考虑用面象对象的编程方法去开发你的系统或者软件,比如:腾讯的QQ,各大一线电商平台,还有公司和学校,医院用的金融业用的一些CRM系统或者实现数据采集,汇总的一些办公软件等等

    面向对象的编程思想相对目前的IT行业,是一个应用很成熟的编程思想,所以这是一个需要重点掌握的知识

2,谈下面向对象编程在工作中带来好处:

  任何一家科技公司或者开发部门,或着外包的团队,都是协同开发,团队开发的.所以功能的实现,往往是要分开设计开发,这时对程序员的对代码的逻辑性,可读性,还有简洁性都是有要求的

这就要谈一谈面向对象开发的好处了,(1) 增加了代码的可读性,方便他人阅读(2):增加了代码的可扩展性,(3)增加了代码的可扩展性(4):增加了代码的复用性,(5)代码更加规范

3,   面向对象   这会对象在Python中有个经典说法   python当中一切皆对象

     我的理解:  

     类:  类和类型在python3中是一个概念,都是类,,

           type(类)的结果就是创建这个类的元类,大多数情况下就是type,除非你指定metaclass

           type默认是所有类的元类,object是所有类的父 类

   对象:__new__()创造了一个对象的空间,__init__一些简单的初始化封装属性          注意:对象的名称空间内存的只有属性,没有方法,

4:组合:(构思逻辑:什么有什么的关系)      一个对象作为另一个对象的属性

5:继承:(构思逻辑:什么是什么的关系)      包括单继承和多继承            java只支持单继承

    单继承:子类对象调用某个方法.(1)子类有就调用子类的.           (2)子类没有就找父类的

                                                        子类有想调用父类的一是super(子类名,self).方法名(除了sel之外的参数)

                                                                                         二是父类名.方法名(self,....)

   注意::在任何类中调用的方法,都要仔细分辨一下这个self到底是谁的对象

多继承:   新式类:  广度优先--- c3算法   mroa方法查看继承顺序

                           python3默认继承object  ,所以py3都是新式类       super().func() 遵循mro算法,在类的内部不用传子类名和self                          

               经典类:   深度优先,遵循一条路走到黑  

                            py2 不继承object,默认都是经典类             py2 需要主动继承object       super(子类名,self).func() 必须传子类名和self

 6:   抽象类 和接口类      

          (1)不能被实例化    (2) 规范子类当中必须实现的某个方法  (3)有原生的实现抽象类的方法,但是没有原生实现接口的方法

              抽象类 : 抽象类中的方法是可以实现的 只能单继承

              接口类 : 可以多继承 但是这个类中的所有方法都不应该实现

          java:    java 只支持类的单继承 抽象类  父类的方法可以实现

                     接口 interface 支持多继承的规范 接口中的所有方法 只能写pass

7:多态   在python当中处处存在             一种类型的多种形态,多个子类去继承父类,那么每一个子类都是这个父类的一种形态

    鸭子类型:   你看着像鸭子,那么它就是鸭子     总之,规范全屏自觉

8:@property  装饰器函数   内置函数  帮助你将类中的方法伪装成属性,也叫特性

                        调用方法的时候不需要主动加括号

                         让程序的逻辑性更合理

   @方法名.setter  装饰器,修改被property装饰的属性的时候会调用被这个装饰器装饰的方法,除了self之外还有一个参数,被修改的值

  @方法名.deleter 装饰器,当要删除被property装饰的属性的时候会调用被这个装饰器装饰的方法

9,@classmethod   类方法的装饰器  内置函数  使用类名调用,默认传类名作为第一个参数,不用对象命名空间中的内容,而用到了类命名空间中的变量(静态属性),或者类方法或静态方法

  @staticmethod  静态方法装饰器,内置函数,说白了就是一个普通函数的方法定义到需要子类调用的抽象类中,不需要传值,就能定义成静态方法    比如:登录的功能函数

10:   内置方法和魔法糖

    __str__ :要求必须实现了__str__,要求这个方法的返回值必须是字符串str类型,#print  %s  str

  __call__: 对象()

  __len__:要求obj必须实现了__len__,要求这个方法的返回值必须是数字int类型

  __new__:在实例化的过程中,最先执行的方法,在执行init之前,用来创造一个对象,构造方法(创造一个空间)

 a.__add__(b)   : 执行加法运算 ===>  同理    __sub__ 执行减法运算    __mul__  执行乘法运算     __div__  执行除法运算

__repr__:  是__str__的备胎,如果有__str__方法,,那么# print %s str都先去执行__str__方法 ,    并且使用__str__的返回值  

                如果没有__str__,那么 print %s str都会执行repr,,repr(obj),%r

__del__   析构方法(释放一个内存空间)          del 对象名    会自动触发这个方法或者Python会,一段时间会检测垃圾,触发垃圾回收机制

            不管是主动还是被动,这个f对象总会被清理掉,被清理掉就触发__del__方法,就会归还操作系统的文件资源

  item系列:  类中有一些特殊的方法,要求对象使用  [] 访问,就能触发        __getitem__()      __setitem__()          __delitem__()     

                    我的理解,多维度的数据类型zhiy只要用括号就能触发(列表,字典,元组)

class B:  
def __getitem__(self,name):
return getattr(self,name)
def __setitem__(self, key, value):
return setattr(self,key,value)
def __delitem__(self, key):
delattr(self,key)

b = B()
b.k2 = 'v2' #添加了一个对象属性
# print(b.k2)
b['k1'] = 'v1' # __setitem__ 新增属性
# print(b['k1']) # __getitem__ 查询单一属性
# print(b.__dict__) # 查看全部属性
del b['k1'] # __delitem__ 删除属性
print(b['k1'])

    hash方法====>底层数据结构基于hash值寻址的优化操作     运行一次程序,涉及到hash值,那么这个值,全程不会变   

                                                                                                   再次运行程序,那么这个hash值相比较上次运行是变了的,但是本次程序全程不会变

               hash(obj) #obj内部必须实现了__hash__方法     带有hash算法的数据类型,效率值高   

    集合的去重内部机制:先调用hash,再调用eq,eq不是每次都触发,只有hash值相等的时候才会触发

__eq__(self,other)   判断两个对象的值是否相等           ==  用这个命令就能触发

重点:      这些内置的命令,会在你的类中有时会用到,需要重点记忆,编写某些模块或者功能时会用到

      

原文地址:https://www.cnblogs.com/laogao123/p/9404105.html