首页 > 编程语言 >python常用魔术方法 (repr str call)

python常用魔术方法 (repr str call)

时间:2022-09-18 09:44:06浏览次数:69  
标签:__ name python self repr 对象 call print del

repr和str的区别

https://blog.csdn.net/LIFENG0402/article/details/121567390

 

class People:  # 类名Person后面加不加(Object)效果是一样的,都表示继承自Object类
    # 创建对象
    def __new__(cls, *args, **kwargs):
        print("调用__new__构造方法")
        position = super().__new__(cls)  # 调用父类的__new__()方法创建对象,开辟内存空间
        # print(position)  # <__main__.People object at 0x7fa19b8a6c10>
        return position  # 将创建的地址空间对象返回,交给__init__方法接收

    # 实例化对象
    def __init__(self, name, age):
        self.name = name  # 在__new__方法返回的内存空间地址中放置name属性
        self.age = age  # 在__new__方法返回的内存空间地址中放置age属性
        # print(self)  # <__main__.People object at 0x7fa19b8a6c10>
        print("调用__init__初始化方法")

    # 对象作为函数调用时的逻辑
    def __call__(self, args):
        print("调用__call__方法,接收到的参数为:%s" % args)

    # 删除对象: 在(del 对象名后所对应的地址空间无任何引用时)或者程序执行结束之后
    def __del__(self):
        print("调用__del__析构方法,删除对象,释放内存空间")

    # 自定义print(对象名)时的输出内容
    def __str__(self):
        return '对象的name是:' + self.name + ',对象的age是:' + str(self.age)


if __name__ == '__main__':
    p = People('liuming', 20)
    # print(p)  # <__main__.People object at 0x7fa19b8a6c10>
    p('abc')  # 调用__call__方法
    p1 = p
    p2 = p
    p3 = p  # 截止到这里p对象所在的地址空间,共有4个对象都在引用,分别是对象:p,p1,p2,p3
    del p3  # 删除的是p3对内存地址空间的引用关系,此时p对象所在的地址空间,共有3个对象在引用,分别是对象:p,p1,p2
    del p2
    del p1
    del p  # 自动调用__del__方法,因为p对象所在的地址空间已经没有任何对象在引用了,所以需要对内存地址进行回收释放
    p4 = People('xiaohong', 18)
    print(p4)  # 对象的name是:xiaohong,对象的age是:18---注意:此时输出的不再是地址空间值了,而是__str__函数自定义return的内容
    print(str(p4))  # 输出内容同print(p4)

 

标签:__,name,python,self,repr,对象,call,print,del
From: https://www.cnblogs.com/h694879357/p/16704226.html

相关文章

  • 如何在基础镜像中安装指定python版本
    背景由于规范要求要使用指定的镜像版本,但是由于该镜像中的python与我使用的版本有差异,怕引起一些不必要的兼容问题,所以我需要自己按基础镜像基础上安装对应版本的python。......
  • 安全巡检 python HTML报告
    1.报表模板[root@yinliao-yanshireport_jinja2]#catxunjian_table.html<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><titl......
  • python调用第三方接口
    为什么要用python调用第三方接口?以往总是会想当然的认为,调用第三方接口只能是前端的工作,但最近在做一个程序时发现,这项工作完全可以使用python来解决,挺惊喜的,毕竟这样就可......
  • python re包 正则表达式
    Python正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在python中提供了一个使用正则的模块re。re模块使Python语言......
  • 【Python小工具】文件解压
    文件解压#-*-coding:utf-8-*-importosimportsysimporttimeimportshutilimportfiletypeimportgzipimporttarfileimportzipfileclassFileUtils:......
  • python中的defaultdict类型
    Python内置的字典类型挺好用,但有一个很麻烦的缺点,当查询的键不存在时,就会报KeyError的错误,影响程序的正常使用,虽然可以用异常捕获处理,但有时候还是不太方便. ......
  • VSCode安装和Python安装及其配置【转载】
    VisualStudioCode(VSCode)是微软出品的一款可扩展的轻量级开源编辑器,并且支持全平台系统。这些特性使得VSCode颇受欢迎,可以说是目前最火的代码编辑器之一了,在程序员圈子里,......
  • python :生成条形码
    1importbarcode2frombarcode.writerimportImageWriter34#Definecontentofthebarcodeasastring5number=input("Enterthecodetogenerateba......
  • Python话题抓取
    话题抓取通过话题入口抓取话题下所有问题和回答数据存储MySQL:topicquestionanswer数据抓取requwsts/xpath/re配置maccookie解密chromecookie文件变更https......
  • Python中的类与对象
    类的创建classStudent native_place='吉林' def__init__(self,name,age): self.name=name#把局部变量name的值赋给实体属性self.name self.age=age#实例方法......