美文网首页
2018-05-13 python之“为啥类第一个参数是实例对象

2018-05-13 python之“为啥类第一个参数是实例对象

作者: lucasdada | 来源:发表于2018-05-13 22:42 被阅读0次

    参考:黄老师 cls

    #! /usr/bin/python
    # coding:utf-8
    """
    本代码由python远程培训班和周末班培训班授课老师黄哥所写。
    __new__和__init__到底是怎么一回事,看下面的代码
    如果类没有定义__new__方法,就从父类继承这个__new__方法。
    __new__先于__init__执行,类带括号调用时,发生这样的一件事,
    先调用类的__new__方法,放回该类的实例对象,这个实例对象就是__init__方法的第一个参数。
    请看代码中tmp,self,p的内存地址都是一样的,都是类的实例对象。
     
    """
    
    
    class Foo(object):
    
        def __new__(cls, *args, **kwargs):
            """如果不覆盖这个__new__方法,也就是说不写这个__new__方法,类会从object
            继承__new__方法完成返回值实例对象
            """
            print("__new__方法先被调用")
            tmp = super(Foo, cls).__new__(cls, *args, **kwargs)
            print(id(tmp))
            print(type(tmp))
            print(isinstance(tmp, Foo))
            print(issubclass(type(tmp), Foo))
            return(tmp)
    
        def __init__(self):
            """self是python默认传的值,该值是调用__new__的返回值"""
            print("__init__被调用")
            print(id(self))
    
    
    p = Foo()
    print(id(p))
    print(type(p))
    代码运行结果
    
    __new__方法先被调用
    4351203424
    <class '__main__.Foo'>
    True
    True
    __init__被调用
    4351203424
    4351203424
    <class '__main__.Foo'>
    

    相关文章

      网友评论

          本文标题:2018-05-13 python之“为啥类第一个参数是实例对象

          本文链接:https://www.haomeiwen.com/subject/icyrdftx.html