类的特殊成员

metaclass

# 在Python中,一切事物都是对象。
****
# class foo:
#     pass
# obj=foo()
# obj是foo的对象
# foo类是type的对象


# 只要写类,默认都继承object类
#类都是type类的对象

class myType(type):

    def __init__(self,*args,**kwargs):
        print("mytype")
        pass

    def __call__(self, *args, **kwargs):  #这里的self是mytype的执行对象foo类
        print("456")
        r=self.__new__()

class foo(object,metaclass=myType):

    def __init__(self):
        pass

    def __new__(cls, *args, **kwargs): #__new__方法是真正创建对象的
        return "对象"

    def fun(self):
        print("hello")

# mytype

obj=foo()
#foo是myType对象,foo()   对象()是执行myType类的__call__方法
# 456
#obj
# 真实是先创建的TYPE的__init__方法,再执行__call__方法,再执行__new__方法,最后才执行foo类的__init__方法

总结: 二、特殊成员 _init_ 类()自动执行,重要 _del_ 析构方法 _call_ 对象() 类()() 自动执行 _int_ int(对象) _str_ str(),很重要 _add_ _dict_ # 将对象中封装的所有内容通过字典的形式返回,很重要

obj3=foo("zhangsan",60)
        d=obj3.__dict__
        print(d)
        # {'name': 'zhangsan', 'age': 60}
        print(foo.__dict__)  #查看类的成员
        # {'__module__': '__main__', '__init__': <function foo.__init__ at 0x000000BAD00FD158>, '__add__': <function foo.__add__ at 0x000000BAD00FD1E0>, '__dict__': <attribute '__dict__' of 'foo' objects>, '__weakref__': <attribute '__weakref__' of 'foo' objects>, '__doc__': None}

_getitem_ # 切片(slice类型)或者索引 _setitem_ _delitem_

_iter_ # 如果类中有 iter 方法,对象=》可迭代对象 # 对象.iter() 的返回值: 迭代器 # for 循环,迭代器,next # for 循环,可迭代对象,对象.iter(),迭代器,next \ # 1、执行li对象的类F类中的 __iter__方法,并获取其返回值 \ # 2、循环上一步中返回的对象

i=iter([11,22,33,44])
i.next()
i.next()
i.next()
i.next()

#i是迭代器
for item in i:
    print(iterm)

#i是可迭代对象 ,执行对象的__iter__方法,获取
for item in i:
    print(item)  

三、metaclass,类的祖宗 a. Python中一切事物都是对象 b. class Foo: pass
obj = Foo() # obj是对象,Foo类 # Foo类也是一个对象,type的对象 c. 类都是type类的对象 type(..) “对象”都是以类的对象 类()