美文网首页
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之“为啥类第一个参数是实例对象

    参考:黄老师 cls

  • Python类 self理解

    self是类方法的一个位置参数,它就是类的实例对象自己,当实例调用方法时: 等同于: 第一个参数是实例自己。 se...

  • staticmethod 和 classmethod

    Python 类有3种方法,分别是实例方法、类方法、静态方法。 实例方法: 实例方法是见的最多的一种。第一个参数为...

  • 一文读懂Python中的self

    神奇的self: 在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作...

  • 1.14类代码编写基础

    一、类对象和实例对象 在python对象模型中,类和通过类产生的实例是两种不同的对象类型: 类类是实例工厂。类的属...

  • 2018-07-31Python (11)

    python 基础语法(11) 面向对象 概念 面向对象最重要的概念就是类和实例,类是实例的抽象,而实例是类的具象...

  • Python面向对象基础

    类的定义 类的定义的语法 示例代码 类的实例化 创建对象使用类名(__init__ 函数除第一个参数外的参数列表)...

  • 消息转发流程

    实例方法的流程 对象实例收到消息(SEL+参数) 根据存储在对象实例中的ISA到类对象,类对象依次查找Class ...

  • python语法入门五

    类和对象 类和对象 基础 继承:python为多继承 类、类对象和实例对象 当实例对象声明后,再删除类对象,那么该...

  • Java Reflection

    类 类的实例对象 如何创建类的实例对象? 直接new通过class实例化(需要有无参数的构造方法) CLass类的...

网友评论

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

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