zoukankan      html  css  js  c++  java
  • 调用类时,加括号和不加括号的区别

    class ListNode:
    def __init__(self, x):
    self.val = x
    self.next = None


    a = ListNode
    a.val = 1
    print(ListNode.val) # 返回 1

    class ListNode2:
    val = 1
    def __init__(self, x):
    self.val = x
    self.next = None

    print(ListNode2.val) # 返回 1

    b = ListNode(3) # 这是在实例化对象,调用 init 对 对象本身定制 val 的值
    print(b.val) # 返回 3

    print(id(ListNode)) # 1324811791128
    print(id(a)) # 1324811791128
    print(id(b)) # 1324843200864




    调用类时,不加括号。那么这个变量a 或者 b 都将时类本身。 进而对他进行的任何操作都是对类本身进行操作。 也不会经过__init__。
    对val进行操作的时候, 也就是给类 增加了一个属性。

    而加上括号之后。那么变量b 就是类实例化出的对象。这是再调用val的时候。 根据类的查找原则, 对象会先到自己的命名空间中找,也就是__init__定制的内容中。
    如果找到了val就返回。也就是 3 了。
    如果__init__ 中没有定制val这个属性。那么就会去类中找,就会返回 1 了!

    下面这个例子,更清楚的反映了。加括号就是调用__init__
    class clsTest():
    y = None
    def __init__(self):
    self.y = '你'

    x = clsTest
    print(x.y) # None

    x = clsTest()
    print(x.y) # 你
  • 相关阅读:
    oracle删除用户及其名下对象
    CENTOS7设置显示中文
    hadoop安装
    linux使用flock文件锁解决crontab冲突问题
    Hive On Spark和SparkSQL
    MapReduce和Tez对比
    安装python的redis模块
    拷贝一个用户下的所有表和数据到另外一个库
    java学习笔记10--泛型总结
    java学习笔记9--内部类总结
  • 原文地址:https://www.cnblogs.com/chengege/p/10275648.html
Copyright © 2011-2022 走看看