类中的特殊方法

"""
    __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)

 

posted @ 2024-12-18 17:51  GDquicksand  阅读(3)  评论(0)    收藏  举报