Python之面向对象(封装、继承、多态)

目录

1.Java与Python中面向对象的区别

2.封装

3.继承【在Python中,所有类默认继承object类】

4.多态


1.Java与Python中面向对象的区别

该篇文章适合掌握Java面向对象基础知识的人阅读,在阅读的时候会发现它们一些语法上会有区别,但是我们有Java的基础,也不难发现其实都差不多,区别都不是很大,不难理解。

2.封装

2.1 类和对象

①创建类语法

class  类名:
    代码块

②实例化对象语法

对象名 = 类名( )

③调用类属性和方法语法

对象名.属性;
对象名.方法()

2.2 self:指的是调用该函数的对象

函数中默认参数self(指的是调用该函数的对象)

案例1:self和对象的内存地址是否一致?一致

案例2:如果是多个对象,调用同一个函数,self地址是否一致?不一致

2.3 属性

注意:若类属性和对象(实例)属性同时存在,会优先调用对象属性

①类属性
    --可以通过类名或者对象访问:写在类里面
       语法: 变量名 = 变量值
    --修改类属性:类属性的修改,只能通过类修改,不能通过对象修改
       语法:类名.变量名=变量值
       注意:如果通过对象对属性进行重新赋值,实际上是给该对象又重新定义了一个属性名一样的变量
②添加对象属性
    --类外面添加对象属性
       语法:对象名.属性名 = 值
       注意:该种方式添加的属性,只能属于该对象的
    --类里面添加对象属性
       语法:变量名 = 变量值
       注意:该种方式添加的属性,属于所有类对象的
    --__init__()方法中添加对象属性
        语法:self.属性名 = 值【用在__init__()初始化方法中】
③获取对象属性
    类外面获取对象属性
        语法:对象名.属性名
    类里面获取对象属性
        语法:self.属性名【用在函数中】   
④私有属性和私有方法
    设置私有属性和方法
        在属性名和方法名前面加两个下划线__
        定义为私有属性和私有方法,不能被子类继承
⑤获取和修改私有属性的值
    获取:定义getXXX()
    修改:定义setXX()

2.4 方法

①类方法
    用装饰器@classmethod标识
②静态方法
    用装饰器@staticmethod标识

2.5 魔法方法

①__XX__()   函数叫做魔法方法,指的是具有特殊功能的函数
②__init__()类似Java语言中的构造方法
   
初始化对象,在创建一个对象时默认被调用,不需要手动调用
    带参数的__init__()方法
③__str__()类似Java语言中的toString()方法
    
print输出对象时,默认打印的是对象在内存中的地址
    如果类中定义__str__方法,则会打印__str__方法中的内容

2.6 __init__():初始化对象

在创建一个对象时默认被调用,不需要手动调用

3.继承【在Python中,所有类默认继承object类】

java中所有类都直接或者间接继承Object

python中所有类都直接或者间接继承object

3.1 单继承

父类:class 父类(object):        
子类:class 子类(父类):

3.2 多继承

子类:class 子类(父类1,父类2)
注意:如果一个类继承多个父类,优先继承父类1的同名属性和方法

3.3 查看一个类的继承关系

类.__mro__ 或 类.mro()

3.4 子类重写父类的同名属性和方法

如果子类重写了父类的同名属性和方法,则会调用子类中的同名属性和方法

3.5 子类调用父类的同名属性和方法

在子类的同名方法中调用语法:父类类名.方法(self)
调用父类方法:super().方法()【适用于单继承】                

4.多态

4.1 概念

多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行效果

4.2 实现多态的步骤

①定义父类,提供父类方法
②定义子类,重写父类方法
③传递子类对象给调用者,返回不同的结果

4.3 案例:水的三种状态

你可能感兴趣的:(python,python,开发语言,后端)