当前位置 : 主页 > 编程语言 > python >

python面向对象编程——封装

来源:互联网 收集:自由互联 发布时间:2022-07-13
1. ​​dir​​ 内置函数 在​​Python​​ 中对象几乎是无所不在的,我们之前学习的变量、数据、函数都是对象 在 ​​Python​​ 中可以使用以下两个方法验证: 在标识符/数据后输入


1. ​​dir​​ 内置函数

  • 在​​Python​​ 中对象几乎是无所不在的,我们之前学习的变量、数据、函数都是对象

在 ​​Python​​ 中可以使用以下两个方法验证:

  • 在标识符/数据后输入一个​​.​​​,然后按下​​TAB​​​ 键,​​iPython​​ 会提示该对象能够调用的方法列表
  • 使用内置函数​​dir​​ 传入标识符/数据,可以查看对象内的所有属性及方法
  • 提示 ​​__方法名__​​​ 格式的方法是 ​​Python​​ 提供的 内置方法 / 属性,稍后会给大家介绍一些常用的 内置方法 / 属性

    序号

    方法名

    类型

    作用

    01

    ​​__new__​​

    方法

    创建对象时,会被 自动 调用

    02

    ​​__init__​​

    方法

    对象被初始化时,会被 自动 调用

    03

    ​​__del__​​

    方法

    对象被从内存中销毁前,会被 自动 调用

    04

    ​​__str__​​

    方法

    返回对象的描述信息,​​print​​ 函数输出使用

    1.1 ​​__del__​​ 方法

    • 在​​Python​​ 中
    • 当使用​​类名()​​ 创建对象时,为对象分配完空间后,自动调用​​__init__​​ 方法
    • 当一个对象被从内存中销毁前,会自动调用​​__del__​​ 方法
    • 应用场景
    • ​​__init__​​ 改造初始化方法,可以让创建对象更加灵活
    • ​​__del__​​​ 如果希望在对象被销毁前,再做一些事情,可以考虑一下​​__del__​​ 方法
    • 生命周期
    • 一个对象从调用​​类名()​​ 创建,生命周期开始
    • 一个对象的​​__del__​​ 方法一旦被调用,生命周期结束
    • 在对象的生命周期内,可以访问对象属性,或者让对象调用方法

    1.2 ​​__str__​​ 方法

    • 在​​Python​​​ 中,使用​​print​​ 输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
    • 如果在开发中,希望使用​​print​​ 输出对象变量时,能够打印自定义的内容,就可以利用​​__str__​​ 这个内置方法了

    注意:​​__str__​​ 方法必须返回一个字符串

    2. 身份运算符

    身份运算符用于 比较 两个对象的 内存地址 是否一致 —— 是否是对同一个对象的引用

    • 在​​Python​​​ 中针对​​None​​​ 比较时,建议使用​​is​​ 判断

    运算符

    描述

    实例

    is

    is 是判断两个标识符是不是引用同一个对象

    x is y,类似 id(x) == id(y)

    is not

    is not 是判断两个标识符是不是引用不同对象

    x is not y,类似 id(a) != id(b)

    is 与 == 区别:

    ​​is​​ 用于判断 两个变量 引用对象是否为同一个
    ​​​==​​ 用于判断 引用变量的值 是否相等

    >>> a = [1, 2, 3]
    >>> b = [1, 2, 3]
    >>> b is a
    False
    >>> b == a
    True

    3 私有属性和私有方法

    应用场景

    • 在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到
    • 私有属性就是对象不希望公开的属性
    • 私有方法就是对象不希望公开的方法

    定义方式

    • 在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法
    class Women:

    def __init__(self, name):

    self.name = name
    # 不要问女生的年龄
    self.__age = 18

    def __secret(self):
    print("我的年龄是 %d" % self.__age)


    xiaofang = Women("小美")
    # 私有属性,外部不能直接访问
    # print(xiaofang.__age)

    # 私有方法,外部不能直接调用
    # xiaofang.__secret()

    3.2 伪私有属性和私有方法

    提示:在日常开发中,不要使用这种方式,访问对象的 私有属性 或 私有方法

    ​​Python​​ 中,并没有 真正意义 的 私有

    • 在给属性、方法命名时,实际是对名称做了一些特殊处理,使得外界无法访问到
    • 处理方式:在名称前面加上​​_类名​​​ =>​​_类名__名称​​
    # 私有属性,外部不能直接访问到
    print(xiaofang._Women__age)

    # 私有方法,外部不能直接调用
    xiaofang._Women__secret()


    上一篇:python面向对象编程——继承
    下一篇:没有了
    网友评论