- __str__: 在对象被打印的时候触发,可以用来定义对象被打印的输出格式
- __del__:在对象被删除的时候触发,可以 用来回收对象以外的其他相关资源,比如系统资源等。
- __call__:在对象呗调用的时候触发。
# -*- coding: utf-8 -*-
"""
__str__: 在对象被打印是自动触发,可以用来定义对象被打印时的输出信息
"""
class People:
def __init__(self, name, age):
self.name = name
self.age = age
obj1 = People('egon', 18)
print(obj1) # <__main__.People object at 0x00000000028B7438>
obj2 = list([1, 2, 3])
print(obj2) # [1, 2, 3] 内置的数据类型,已经定义好打印格式
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '<name:%s | age:%s>' % (self.name, self.age)
obj1 = People('egon', 18)
print(obj1) # <name:egon | age:18> # 通过 __str__自定义数据类型
"""
__del__: 在对象被删除时自动触发,可以用来回收对象意外其他相关资源,比如系统资源
"""
class Foo:
pass
obj = Foo()
del obj # 主动删除
class Foo:
def __init__(self, x, filepath, encoding='utf-8'):
self.x = x
self.f = open(filepath, 'rt', encoding='utf-8')
def __del__(self):
print('run.....回收对象关联的资源')
# 回收对象关联的资源
self.f.close()
obj = Foo(1, 'a.txt')
print('============')
# ============
# run.....回收对象关联的资源
"""
__call__:在对象被调用的时候触发
"""
class Foo:
def __init__(self, x, y):
self.x = x
self.y = y
obj3 = Foo(1, 2)
# obj() # TypeError: 'Foo' object is not callable
print('+++++++++++++++++++++++++++++++++')
class Foo1:
def __init__(self, x, y):
self.x = x
self.y = y
def __call__(self, *args, **kwargs):
print(self, args, kwargs)
obj2 = Foo1(1, 2)
obj2(1,2,a=3,b=4) # <__main__.Foo1 object at 0x0000000002304278> (1, 2) {'a': 3, 'b': 4}