• python的类与对象


    类与对象

    1.什么是类

    类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问题

    对应。

    2.什么是对象

    对象是由类创造出来的变量,它可以调用类里面的所以函数(方法),效果就像函数的函数名,可以操作函数一样。

    3.类与对象的编程方式

    liu是类,a为liu这个类创造出来的对象。

     

    4.类里面self的作用

    在类编程里self是一个重要的参数,它在类的方法里面无处不在,那么它到底是什么呢?

    由代码可以看出这里的这个的self就a这个对象,所以python自动传入的这个参数就a这个变量。

    为什么要把a这个变量传入类里面的方法中呢?原因是为了在类里面进行封装。

    5.封装

    当有多个参数需要传入类里面的方法的时候,可以利用封装这些参数,让传参变得很简洁。

    这是self的一种利用方式,但是我们一般不这么做,

    如果只是在f1里面定义self.bb=123,不执行f1函数则f2 没有办法拿到self.bb=123这个代码,就无法打印self.bb了。

    根据以上的代码,如果类里面想要使用self.bb则需要在调用里面方法的时候已经把self.bb=123定义了。

    在封装的时候我们利用__init__这个方法进行封装,原因是当我们执行类名+()的时候__init__就执行了。

    只要__init__执行以后,就可以把init里的东西都定义了,以后在类或者类外面的代码都可使用

    一旦定义以后里面用self 外面用a。注意这里的self 等于啊只有在类里面才默认,就是在类里面输出self.dd和a.dd都是一样的,但是外面不不行,除非定义一个self = a才能执行self.bb

    因为a在外面创建的可以为全局变量,self只是类里面的方法创建的为局部变量,这种初始化的方法 我们称为构造方法。对应python销毁对象的方法为析构方法__del__python自己执行的。

     

    6.继承

    类与类之间存在子类和父类的关系。子类可以继承父类的方法。

    并且继承具有传递性,a继承b,b继承c,则a就会继承c的方法。

    如果两个类里面都有会优先去自己里面找方法,没有再去找父类方法。

    多继承:

    多继承只在python里面有,寻址方法的顺序是自己,左边第一个父类,第二个父类,以此类推。

    多继承里面当父类有多重的情况利用图形记忆

    情况1:

     情况2:

    如果是上图的情况,则python会找1然后2然后3然后是1和3的父类最后4.所以在第一种情况中间加了一个父类的时候,会找完夹在中间的父类,再按照情况1来找。

    7.多态

    python原生支持多态

    在python里面往函数里面传类的时候不用把类的名字规定好,只要一个人x。什么类都可以传入。其它语言里面需要在x前面规定类的名字。

    并且python默认没有接口。

    补充:

    注意在执行某个类里面的方法的时候,如果这个方法又调用的其它方法,这个时候你要注意,调用方法的时候self是那个类创造的对象,就由那个类开始找这个方法,而不是从正在

    执行的这个类里面开始找方法。A,B,C都有ooo方法,上图d1找xxx的时候到了c在里面用xxx执行ooo,但是不是从c开始找ooo,因为self的d1由D所创造,所以根据找方法原则,则会在D类的位置

    开始找ooo,所以最后在A里面找到,而不是C里面找到。

    继承父类的__init__方法

    未继承:

    继承以后:

    注意如果出现b()这样的代码就会初始化一次所以打印了这个多22,11。

    这样就不会出现上面代码中的多次初始化。注意这里super里面传的self是c自己,他被传入上面的代码里面进行初始化。

    初始化的顺序由代码决定。

    利用反射查找类和对象里面的成员

    对象可以找类和对象里面的成员,类只能找类里面的成员

    利用反射导入模块,查找类创建对象,查找对象里面的元素

     

    静态字段

    尽量保持,自己的成员,自己去访问,除了类中的方法,用对象去访问

    以后不到万不得已不要用对象a去调用,都用liu去调用。

    用类去调用类里面的方法需要传入这个类创立的对象作为参数,所以我们一般不这么做,用对象调用的时候参数是python帮我们传输的。

    静态方法

    静态方法不用传入对象这个参数,并且对象和类都可以访问,不到万不得已都用类访问。

    静态方法不需要创建对象就可以调用,相当于在类里面写了一个函数,这个对Java和c#就有用,因为他们只能用面向对象去编程。

    类方法

    类方法默认传入参数是类名,一般用类调用,虽然对象也可以调用,并且传入参数也是类名(python好变态)

    特性

    通过类似于字段的形式用对象调用函数,注意这里只能用对象调用,因为没有括号所以如果用类调用没有办法自动传入self这个参数。并且特性方法只能有一个参数self多了

    会报错,因为self是python自动传入的。其它参数只能手动传入,可是没有括号让其传入参数,所以会报错。

     

    重新设置特性的值

     

    重新设置字段

    成员修饰符(公有,私有)

    成员修饰符用两个__表示,并且只能在内部用方法输出

    外部输出会出错

    对于私有的只有自己能访问自己,子类和父类都不能访问,只有自己好使

    函数也是一样的只有在内部方法里面执行

    静态方法和普通方法都是可以在内部调用的

    python强行外部调用私有方法,万不得已不要用

    面向对象特殊的方法

    __init__,__del__

    对象后面加()执行__call__方法

    _getitem__,_setitem__,_delitem__

     

    __dict__获取对象和类里面的元素

    __iter__

    注意在执行__call__方法的时候,self还是对象本身,不是对象加括号产生的新变量

    所以某个类里面的self都是对象这个变量。

    注意图中的self.__new__就是FOO调用__new__方法,所以才会到FOO里面去找__new__方法的,而不是obj,因为

    __call__里面的参数是self是FOO所以用FOO调用方法__new__的时候就是用类调用所以参数里面要加入self,注意这里的

    self也是Foo,因为类调用函数的时候可以传对象也可传类名。

    如果一个类是另外一个类创造的则调用它的时候。它可以充当类或者对象。 

     上面地址讲诉了新式类和经典类的区别。

    对象调用函数会默认传入对象这个参数就是self,类调用函数不会默认传入参数,所以参数可以传类,对象或者任何东西。

  • 相关阅读:
    远程安装WinXP OEM版系统的痛苦经历
    许可证服务因许可证不够出现占用CPU的故障
    AvayaP133G2和3Com 3300交换机间的Vlan连接
    从win2000升级到win2003后ISA2000缓存的问题
    大型局域网中用ISA隔离部分计算机
    ORACLE学习第二天
    ORACLE ROWID解析
    ORA32773问题解决
    ORACLE学习第三天
    ORACLE表空间迁移
  • 原文地址:https://www.cnblogs.com/lyx958700392/p/5616426.html
Copyright © 2020-2023  润新知