"""
__init__ 构造方法, 类()自动执行
__del__ 析构方法,对象在被销毁时执行的方法
__call__ 对象() 类()() 自动执行
__int__ int(对象)
__str__ str()
"""
class FOO:
def __init__(self):
self.name = "aaa"
print("init")
def __call__(self, *args, **kwargs):
return self.name
def __int__(self):
return 123
def __str__(self):
return "abc"
obj = FOO()
print(obj()) # FOO()()
print(int(obj))
print(str(obj))
print(obj) # print(str(obj))
print("========================================")
"""
__dict__ # 将对象中封装的所有内容通过字典的形式返回
__getitem__ # 将对象通过(索引或切片)的方式去查询
__setitem__ # 将对象通过索引去添加值
__delitem__ # 将对象通过索引去删除值
"""
class Index:
def __init__(self, name, age):
self.name = name
self.age = age
def __getitem__(self, item):
if type(item) == slice:
print("这是切片")
print(item.start, item.step, item.stop)
else:
print("这是取值")
print(item)
def __setitem__(self, key, value):
print(key, value)
def __delitem__(self, key):
print(key)
obj_index = Index("aaa", 18)
print(obj_index.__dict__)
obj_index[10]
obj_index[10:11:2]
obj_index[20] = 123
del obj_index[99]
print("========================================")
"""
__iter__
# 如果类中有 __iter__ 方法,对象就是可迭代对象
# 对象.__iter__() 的返回值为: 迭代器
# for 循环,执行迭代器时用next()
# for 循环,执行可迭代对象先执行对象.__iter__(),然后在执行迭代器,next
# 1、执行li对象的类F类中的 __iter__方法,并获取其返回值
# 2、循环上一步中返回的对象
"""
class iter_obj:
def __init__(self, name, age):
self.name = name
self.age = age
def __iter__(self):
return iter([self.name, self.age])
obj_i = iter_obj("aaa", 18)
for i in obj_i:
print(i)