python类参数self使用示例

代码如下:

#coding:utf-8
"""
__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)

(0)

相关推荐

  • python中self原理实例分析

    本文实例讲述了python中self原理.分享给大家供大家参考.具体分析如下: 类的方法与普通的函数只有一个特别的区别--它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值.这个特别的变量指对象本身,按照惯例它的名称是self. 假如你有一个类称为MyClass和这个类的一个实例MyObject.当你调用这个对象的方法 MyObject.method(arg1, arg2) 的时候,这会由Python自动转为 MyClass.method(M

  • python 参数列表中的self 显式不等于冗余

    self在区分全局变量/函数和对象中的成员变量/函数十分有用.例如,它提供了一种作用域机制,我个人认为比Ruby的@和@@清晰多了,这可能是习惯使然吧,但它确实和C++.Java中的this很相似. 然而,self总是有令我困扰的地方,我以前在这里说过-我曾幻想能在Python3中这些能得以改进,然后通常会引发一轮热议并最终以人们所说的"显胜于隐"告终. 我在巴西的时候曾和Luciano Ramalho(巴西Python组织的主席)有过一次交谈.他让我明白并非无处不在的self让我困扰

  • 全面理解Python中self的用法

    刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问. self代表类的实例,而非类. 实例来说明: class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt() 执行结果如下 <__main__.Test object at 0x000000000284E080> <class

  • Python中为什么要用self探讨

    接触Python以来,看到类里的函数要带个self参数,一直搞不懂啥麻子原因.晚上特别针对Python的self查了一下,理理. Python要self的理由 Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发).Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示.(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致

  • python self,cls,decorator的理解

    1. self, cls 不是关键字 在python里面,self, cls 不是关键字,完全可以使用自己写的任意变量代替实现一样的效果 代码1 复制代码 代码如下: class MyTest: myname = 'peter' def sayhello(hello): print "say hello to %s" % hello.myname if __name__ == "__main__": MyTest().sayhello() 代码1中, 用hello代

  • python类参数self使用示例

    复制代码 代码如下: #coding:utf-8"""__new__和__init__到底是怎么一回事,看下面的代码如果类没有定义__new__方法,就从父类继承这个__new__方法.__new__先于__init__执行,类带括号调用时,发生这样的一件事,先调用类的__new__方法,放回该类的实例对象,这个实例对象就是__init__方法的第一个参数.请看代码中tmp,self,p的内存地址都是一样的,都是类的实例对象.""" class

  • python类参数定义及数据扩展方式unsqueeze/expand

    目录 类的参数定义 数据扩展 类的参数定义 将conda环境设置为ai,conda activate ai 这个文件的由来: 由于在yolov1的pytorch实现的损失函数中,看到继承了nn.Module,并且其中两个参数不像c++那里指定类型,那么他们的类型是哪里来的 这里就是在探索这样一件事 操作逻辑: 先在类中定义了构造函数以及一个自定义函数: 构造函数定义了属性S.B,自定义函数引入两个参数,对两个参数进行调用 这里就说明参数的结构是怎么样的,取决于参数被调用了什么东西,比如这里调用了

  • Python类的继承用法示例

    本文实例讲述了Python类的继承用法.分享给大家供大家参考,具体如下: python -类的继承 root@kali:~/python/mod# vi class2.py root@kali:~/python/mod# cat class2.py #!/usr/bin/python # --*-- coding:utf-8 --*-- class person: def __init__(self,name,nationality,age,sex,job): self.Name = name

  • python getopt 参数处理小示例

    opts, args = getopt.getopt(sys.argv[1:], "t:s:h", ["walletype=", "servicename=",'help']) for a,o in opts: if a in ('-t', '--walletype'): walle_type = o elif a in ('-s', '--servicename'): service_name = o elif a in ('-h', '--h

  • Python实现带参数与不带参数的多重继承示例

    本文实例讲述了Python实现带参数与不带参数的多重继承.分享给大家供大家参考,具体如下: 1. 不带参数的多重继承 # 作者:hhh5460 # 时间:2017.07.18 class A(object): def show_x(self): print('A') class B(object): def show_y(self): print('B') class C(object): def show_z(self): print('C') class D(A, B, C): pass #

  • Python 类,property属性(简化属性的操作),@property,property()用法示例

    本文实例讲述了Python 类,property属性(简化属性的操作),@property,property()用法.分享给大家供大家参考,具体如下: property属性的创建方式有两种:1.@property装饰器方式   2.类属性方式 ( 类属性=property() ) property属性可以简化实例对象对属性的操作(获取.设置),可以对属性做类型校验和预处理等. 装饰器方式: demo.py(@property,获取属性值,旧式类与新式类都有的方式): class Goods: @

  • python 类之间的参数传递方式

    练手记录以及调试步骤. class A(object): def __init__(self,a="A"): print("enter",a) print("leave",a) def mainA(readA,*D): #如果使用实例化B(),调用mainA,D收集进来D多余的参数.(参考第3点说明) print("enter mainA") reaA = "内部添加的" print("leave

  • Python类中self参数用法详解

    Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了. 首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,

  • Python函数参数基础介绍及示例

    目录 视频 函数的参数 位置参数 默认参数 默认参数陷阱 视频 观看视频 函数的参数 定义函数时,我们把参数的名字和位置确定下来,函数的接口定义就完成了.参数在函数名后的括号内指定.您可以根据需要添加任意数量的参数,只需用逗号分隔即可.对于函数的调用者,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义可以使用必选参数.默认参数.可变参数和关键字参数. 位置参数 我们先写一个计算x2的函数: def power(x

  • python动态参数用法实例分析

    本文实例讲述了python动态参数用法.分享给大家供大家参考.具体分析如下: 先来看一段代码: class Person: def __init__(self,*pros,**attrs): self.name = "jeff" self.pros = pros for (key,value) in attrs.items(): stm = "self.%s = /"%s/""% (key,value) exec(stm) if __name__

随机推荐