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 方法名([参数]) # 方法体 # 类名.方法名 # 对象.方法名 #魔术方法 自动执行
原文地址:https://blog.csdn.net/Katherine1029/article/details/143696394
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!