Python之魔术方法笔记

复制代码
魔术方法就是一个类、对象中的方法,和普通方法不一样的是,普通方法需要调用,而魔术方法是在特定时刻自动调用
#encoding=utf-8
import sys
#__init__:初始化魔术方法
#触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)
#__new__:实例化的魔术方法
#触发时机:实例化时触发
#__call__:对象调用方法
# 触发时机:把对象当成函数使用时候,会默认调用此函数中的内容

#对象赋值n=5
复制代码
class Person:

    def __init__(self,name):
        print('----->init',self)
        self.name=name
    def say_hello(self):
        print(f'hello {self.name}')
    def __new__(cls,*args,**kwargs):#__new__向内存要空间--》地址
        print('----->new')
        return super(Person,cls).__new__(cls)
        # position= object.__new__(cls)
        print(position)
        return position

    def __call__(self,name):
        print('----->call')
        print('执行对象得到的参数:',name)

    # def __del__(self):
    #     print('----->del')
p1=Person('aa')
print(p1)
# print(p1.name)
p1.say_hello()
p1('hell0')


class Person1:
    def __init__(self,name):
        print('----->init')
        self.name=name
    #
    def __del__(self):
        print('----->del')


p11=Person1('aa')
p111=p11
p112=p11
p111.name='tom'
print('p11--->%s'%p11.name)
print('p112--->%s'%p112.name)
del p11
print(p111)
print(p112)
print(sys.getrefcount(p111))#获取指向p11的引用个数
print('p112--->%s'%p112.name)
print('p111--->%s'%p111.name)
# del p11
# del p111
# del p112
# print(p11.name)
# print(sys.getrefcount(p11))
#python解释器,回收所有在本次执行过程中使用到的空间
复制代码
__str_:单纯的打印对象的名称,出来的是一个地址,地址对于开发者来说,没有太大的意义
如果想打印对象名的时候能够给开发者更多一些信息量
触发时机:打印对象名,自动触发去调用__str__里面的内容
注意:一定要在__str__方法中添加return,return后面的内容就是打印的内容
'''
复制代码
class Person:
    def __init__(self, name,age):
        self.name = name
        self.age=age

    def __str__(self):
        return '姓名是:'+self.name+',年龄是:'+str(self.age)

p=Person('tom',19)
print(p)
复制代码
'''
总结:魔术方法
重点:
__init__(构造方法,创建完空间后调用的第一个方法)
__str__
了解:
__del__:没有指针引用时会调用99%不需要重写
__new__:作用开辟空间
__call__:想不想将对象当做函数用
'''
# 大总结:
#普通方法 --》def 方法名(self,参数):
             # 方法体
             # 对象.方法
             # class A:
             #     def a(self):
             #         pass
             #     def b(self):
             #         #调用a的方法
             #        self.a()



#类方法        @classmethod
#           #def 方法名(cls,[参数])
#               方法体
#               类名.方法名
#               对象.方法名
#静态方法       @staticmethod
#               def 方法名([参数])
#               方法体
#               类名.方法名
#               对象.方法名
#魔术方法 自动执行
相关推荐
冷雨夜中漫步6 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴7 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再7 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
m0_736919108 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手9 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934739 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy9 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖9 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_7634724610 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威10 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos