Python(十一)-__init__()方法,__str__()方法,__del__()方法

目录

魔法方法

无参__init__()方法

有参__init__()方法

__str__()方法

__del__()方法


魔法方法

魔法方法指的是:可以给Python类增加魔力的特殊方法。有两个特点:

(1)总是被双下划线所包围;

(2)在特殊时刻会被自动调用,不需要开发者手动去调用。

# 魔法方法语法:

__魔法方法名__()

在Python中,常用的魔法方法有:

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。
__del__(self)当一个对象被删除或销毁时,会被自动调用。

无参__init__()方法

class 类名:
    def __init__(self):
        代码
        ...

例如

给车设置对象,直接获取属性结果

class Car(object):def __init__(self):print(f"调用 car.__init__ 初始化的魔术方法 ----- {id(self)}")self.brand = "坦克 700"self.price = 500000def show(self):return f"品牌: {self.brand}, 价位: {self.price}"if __name__ == '__main__':c1 = Car()print(id(c1))print(c1.show())print("--------------------------------------")c2 = Car()c2.brand = "五菱宏光"c2.price = 60000print(id(c2))print(c2.show())print("--------------------------------------")

有参__init__()方法

class 类名:
    def __init__(self, 参数1, 参数2,...):
        代码
        ...

 例如

直接在创建车对象,初始化设定品牌,和价位,在类外部直接获取对象属性值

class Car(object):def __init__(self, brand, price):print(f"调用 car.__init__ 初始化的魔术方法 ----- ")self.brand = brandself.price = pricedef show(self):return f"品牌: {self.brand}, 价位: {self.price}"if __name__ == '__main__':c1 = Car("比亚迪 汉", 210000)print(c1.show())print("--------------------------------------")c2 = Car("吉利 星越", 160000)print(c2.show())print("--------------------------------------")

__str__()方法

内存地址值,也称为引用。表现形式有两种:

(1)十进制数 5040624,id()函数

(2)十六进制数 0x45AC6

class 类名:
    def __str__(self):
        代码
        ...
        return 字符串型的结果

例如

class Car(object):def __init__(self):print(f"调用 car.__init__ 初始化的魔术方法 ----- {id(self)}")self.brand = "坦克 700"self.price = 500000# def __str__(self):#     return f"品牌: {self.brand}, 价位: {self.price}"def __str__(self):return f"品牌: {self.brand}, 价格: {self.price}"if __name__ == '__main__':c1 = Car()print(id(c1))print(c1) # 旧: <__main__.Car object at 0x0000017A054C6970> 新: 打印 __str__返回的结果print(c1.__str__()) # <__main__.Car object at 0x0000017A054C6970>print("--------------------------------------")c2 = Car()c2.brand = "五菱宏光"c2.price = 60000print(id(c2))print(c2) # 旧: <__main__.Car object at 0x0000017A054C6970> 新: 打印 __str__返回的结果print(c2.__str__()) # <__main__.Car object at 0x0000017A054C6970>

__del__()方法

class 类名:
    def __del__(self):
        代码
        ...

例如

# del 魔术方法: 当对象被销毁时才会执行import gc
class Conn(object):def __init__(self, host, port, user, password):self.host = hostself.port = portself.user = userself.password = passworddef __str__(self):return '%s:%s:%s:%s' % (self.host, self.port,self.user, self.password)def __del__(self):print(f"当前对象: {self.__str__()} 被销毁了")if __name__ == '__main__':c1 = Conn('192.168.127.12', '8080', 'admin', '123456')print(c1)del c1  # 销毁c1对象gc.collect()

然而,Python的垃圾回收机制并不保证__del__方法一定会被调用,因为Python使用引用计数来管理内存。只有当对象的引用计数降到0时,对象才会被销毁,并且__del__方法才会被执行。

这里是你的代码的执行流程:

  1. 创建Conn类的实例c1
  2. 打印c1对象。
  3. 使用del c1删除对c1的引用,这使得c1的引用计数减1。
  4. 调用gc.collect()进行垃圾回收,这会清理掉引用计数为0的对象。
  5. 如果c1的引用计数确实为0,__del__方法会被调用,打印出销毁信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558817.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes 中 pod 的管理及优化

目录 一 kubernetes 中的资源 1.1 资源管理介绍 1.2 资源管理方式 1.2.1 命令式对象管理 1.2.2 资源类型 1.2.3 基本命令示例 1.2.3 运行和调试命令示例 1.2.4 高级命令示例 二 什么是pod 2.1 创建自主式pod &#xff08;生产不推荐&#xff09; 2.2 利用控制器管理…

零工市场转型数字化的挑战和机遇

我们的生活因为科技而变的更加方便、便利&#xff0c;例如手机支付、网上购物&#xff0c;那么就目前的就业市场来说&#xff0c;零工市场也面临着数字化转型的挑战和机遇。 零工市场数字化的机遇&#xff1a; 1.通过大数据的计算&#xff0c;极大的提高了零工市场中的匹配效率…

定点数和浮点数的详细介绍(一)定义、范围、位宽

1.定点数 1.1定点数描述 定点数包括定点小数(纯小数)、定点整数(纯整数)、整数和小数位数固定的实数。 1.2定点小数: 小数点默认在符号位后面,首位为符号位,其他为数值位(在用二进制代表小数时,例如0xFF,就表示0.5+0.25+0.125+0.0625+0.03125........) 例如,用…

希亦超声波清洗机值得购买吗?清洁技术之王多维度测评大揭秘!

随着人们生活质量的提升&#xff0c;高质量眼镜愈发受到欢迎&#xff0c;但它们的清洁与保养却常常被疏忽&#xff0c;导致镜片蒙尘受损&#xff0c;影响佩戴者的视觉清晰度。为此&#xff0c;超声波眼镜清洗机作为一种新兴潮流应时而生&#xff0c;以其高效清洁眼镜及珠宝、精…

无线AC——FW1——RT1——FW2——无线AP配置

无线AC——FW1——RT1——FW2——无线AP配置 AC: ! service dhcp ! ip dhcp pool v130 network-address 172.168.130.0 255.255.255.0 default-router 172.168.130.

三好夫人“硬控”嘴强王者老公

工作有点累了… 有点困了… 喝酒了… 吃的太饱了… 今天外面下雨的原因… 外面太热了… 最近压力大… 姐妹们是不是很熟悉这些话术&#xff0c;三好夫人可以很明确的告诉大家&#xff0c;天下的老公都一样&#xff0c;嘴上厉害的很&#xff0c;但是一到实践&#xff0c;…

React复习

文章目录 常用的HooksuseStateuseReduceruseRefuseContextuseMemouseCallbackuseEffect 组件通信Props&#xff08;属性&#xff09;Ref&#xff08;引用&#xff09;Context&#xff08;上下文&#xff09;State&#xff08;状态&#xff09;回调函数Event Bus&#xff08;事件…

KDTS 实现MySQL至KingbaseES迁移实践

此文章以linux环境实践&#xff0c;KingbaseES一下使用KES代替。 KDTS KDTS工具安装KES时会一起安装&#xff0c;一般存在目录为&#xff1a;ClientTools目录下guitools文件夹中 启动 进入KDTS-WEB下bin目录&#xff0c;执行sh文件 cd /opt/Kingbase/ES/V8/ClientTools/guit…

盘点2024年15大投屏软件电脑版,看看哪款最好用?

无线投屏软件哪个好用&#xff0c;相信这个问题困扰过不少同鞋&#xff0c;最重要的当然是画质高、投屏流畅&#xff0c;最好还是免费滴&#xff01; 接下来就分享下国内外一些流行的投屏工具&#xff0c;共计15款&#xff0c;通过对比他们的 优缺点&#xff0c;相信你可以快速…

2025西安电子科技大学研招网拟招生人数VS 24年实际录取人数

研招网拟招生人数 VS 24年实际录取人数&#xff08;分析速览&#xff09; 10月8日研招网公布拟招生人数信息后&#xff0c;就有同学问研招网人数准不准确&#xff0c;其实研招网公布的人数并不不准确&#xff0c;但是学长学姐还是给大家统计了一下&#xff0c;与去年实际录取人…

nginx问题解决-nginx代理数据库端口

一.问题背景 无法直接访问数据库地址&#xff0c;需要公网转发访问 二.配置文件 stream {upstream sql_socket {server IP:端口;#sql ip和端口}server {listen 端口;proxy_connect_timeout 60s;proxy_pass sql_socket;} } 三.异常处理 重新编译Nginx并在编译选项中包含--wi…

开源计算器应用的全面测试计划:确保功能性和可靠性

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

abc374 g

很容易想到建图&#xff0c;初始想法为&#xff0c;建完图后&#xff0c;求一个最小路径覆盖&#xff0c;但因为整个图不是DAG&#xff0c;所以需要缩点&#xff0c;但路径覆盖有两种说法&#xff0c;一种是最小不相交路径覆盖&#xff0c;另一种是最小可相交路径覆盖。 对于最…

Linux-更多的结构化命令

for命令 C语言风格的for语句 while命令 until命令 嵌套循环 循环处理文件数据 控制循环-break命令 控制循环-continue命令 处理循环输出 实例&#xff1a;查询可执行文件、创建多个用户账户

【华为OD机试真题】95、最少面试官数

package mainimport ("fmt""sort" )type s struct {start intend intworkCount int }type duration struct {start intend int }// 查询时间段内是否有可用的面试官 func getFreeS(sList []*s, d *duration, workCountLimit int) (sIndex int)…

DASCTF 2024暑期挑战赛wp

WEB 题目&#xff1a;Sanics revenge 解题步骤 首先看到给出的附件: from sanic import Sanic import os from sanic.response import text, html import sys import random import pydash # pydash5.1.2 # 这里的源码好像被admin删掉了一些&#xff0c;听他说里面藏有大秘密 c…

两个pdf怎么合并成一个pdf?超简单的合并方法分享

在日常工作和学习中&#xff0c;我们经常会遇到需要将多个PDF文件合并成一个文件的情况&#xff0c;以便更好地管理和分享。今天&#xff0c;将为大家详细介绍5种实用的方法&#xff0c;能够一键合并多个PDF文件&#xff0c;有需要的小伙伴快来一起学习下吧。 方法一&#xff1…

车牌字符识别系统源码分享

车牌字符识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

霍普菲尔德(Hopfield)神经网络求解旅行商问题TSP,提供完整MATLAB代码,复制粘贴即可运行

Hopfield神经网络是以美国物理学家约翰霍普菲尔德&#xff08;John Hopfield&#xff09;的名字命名的。他在1982年提出了这种类型的神经网络模型&#xff0c;因此通常被称为Hopfield网络。旅行商问题&#xff08;Traveling Salesman Problem&#xff0c;TSP&#xff09;是一个…

Linux文件权限与用户管理详解:权限、所属用户组和所有者的变更

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…