当前位置: 首页 > article >正文

Python---魔术方法

1、什么是魔术方法

在Python中,__xxx__()的函数叫做魔法方法,指的是具有特殊功能的函数。

2、__init__()方法(初始化方法或构造方法)

思考:人的姓名、年龄等信息都是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?

答:可以,使用__init__() 方法,其作用:实例化对象时,连带其中的参数,会一并传给__init__函数自动并执行它。__init__()函数的参数列表会在开头多出一项,它永远指代新建的那个实例对象,Python语法要求这个参数必须要有,名称为self。


# 1、定义一个类
class Person():
    # 初始化实例对象属性
    def __init__(self, name, age):
        # 赋予name属性、age属性给实例化对象本身
        # self.实例化对象属性 = 参数
        self.name = name
        self.age = age

# 2、实例化对象并传入初始化属性值
p1 = Person('孙悟空', 500)
# 3、调用p1对象自身属性name与age
print(p1.name)
print(p1.age)


① __init__()方法,在创建一个对象时默认被调用,不需要手动调用

② __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象

引用传递过去。

3、__str__()方法

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__方法,那么就会打印从在这个方法中 return 的数据。

没有使用__str__()方法的类:


# 1、定义一个类
class Car():
    # 首先定义一个__init__方法,用于初始化实例对象属性
    def __init__(self, brand, model, color):
        self.brand = brand
        self.model = model
        self.color = color

    # 定义一个__str__内置魔术方法,用于输出小汽车的相关信息
    def __str__(self):
        return f'汽车品牌:{self.brand},汽车型号:{self.model},汽车颜色:{self.color}'

# 2、实例化对象c1
c1 = Car('奔驰', 'S600', '黑色')
print(c1)


__str__这个魔术方法是在类的外部,使用print(对象)时,自动被调用的

② 在类的内部定义__str__方法时,必须使用return返回一个字符串类型的数据

4、__del__()方法(删除方法或析构方法)

当删除对象时,python解释器也会默认调用__del__()方法。


class Person():
    # 构造函数__init__
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    # 析构方法__del__
    def __del__(self):
        print(f'{self}对象已经被删除')

# 实例化对象
p1 = Person('白骨精', 100)
# 删除对象p1
del p1


__del__()方法在使用过程中,比较简单,但是其在实际开发中,有何作用呢?

答:主要用于关闭文件操作、关闭数据库连接等等。

5、总结

提到魔术方法:① 这个方法在什么情况下被触发 ② 这个方法有什么实际的作用

__init__():初始化方法或者称之为“构造函数”,在对象初始化时执行,其主要作用就是在对象初始化时,对对象进行初始化操作(如赋予属性)

__str__():对象字符串方法,当我们在类的外部,使用print方法输出对象时被触发,其主要功能就是对对象进行打印输出操作,要求方法必须使用return返回字符串格式的数据。

__del__():删除方法或者称之为“析构方法”,在对象被del删除时触发,其主要作用就是适用于关闭文件、关闭数据库连接等等。


http://www.kler.cn/a/158996.html

相关文章:

  • Minikube 上安装 Argo Workflow
  • 螺旋矩阵II(leetcode 59)
  • LeetCode题解:18.四数之和【Python题解超详细】,三数之和 vs. 四数之和
  • 从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改
  • 从零开始学习 sg200x 多核开发之 uboot saveenv 功能使能
  • 深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器
  • 在AWS EC2中部署和使用Apache Superset的方案
  • 【开源】基于JAVA的校园疫情防控管理系统
  • JeecgBoot 框架升级 Spring Boot 3.1.5
  • ifstream读取txt中的中文数据转成QString出现乱码
  • ArcGIS点集之间两两连线
  • CMake中的include函数
  • vue3项目实现文档 JSON 格式和 Excel 表格的在线预览,(智能搜索,未验证)
  • 【前端】html不渲染换行\n\t\r等的问题
  • HPV专家谭巍主任谈:我国HPV感染率问题,以及该如何预防?
  • 云原生周刊:K8s 的 YAML 技巧 | 2023.12.4
  • 24、pytest通过xfail将测试函数标记为预期失败
  • UE小:UE5性能分析
  • 27、卷积 - 卷积特征的可视化和一个神奇的网站
  • Kafka Schema介绍
  • Git版本控制---入门学习
  • 解决vue ssr服务端渲染运行时报错:net::ERR_PROXY_CONNECTION_FAILED
  • Retrofit的转换器
  • 迅为RK3588开发板定制Ubuntu和Debian系统-系统定制(无法联网)
  • 财报解读:立足海外音视频直播战场,欢聚的BIGO盾牌还需加强?
  • BearPi Std 板从入门到放弃 - 后天篇(2)(I2C1读写EEPROM)