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