码迷,mamicode.com
首页 > 其他好文 > 详细

14.12.4类的特殊成员4

时间:2018-04-13 15:07:31      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:Python   metaclass   

类的特殊成员

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(..)
“对象”都是以类的对象 类()

14.12.4类的特殊成员4

标签:Python   metaclass   

原文地址:http://blog.51cto.com/10777193/2102987

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!