python面向对象编程——封装(python封装代码调用)

网友投稿 392 2022-08-25


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 == aTrue

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()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python面向对象编程——继承(python面向对象的继承和多态)
下一篇:new出来的对象中无法使用@autowired进行对象bean注入问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~