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) # 你
  • 相关阅读:
    Java 环境搭建的一些问题
    DefaultHttpClient is deprecated 【Api 弃用]】
    Java良葛格 学习笔记《二》
    Java良葛格 学习笔记
    JAVA EE 运行环境配置(包含JAVA SE)
    AIR使用文件对象操作文件和目录
    As3.0 类的【枚举】
    Java&&As3.0 中的final 关键字
    字符串参数组合
    PHP 超级全局变量
  • 原文地址:https://www.cnblogs.com/chengege/p/10275648.html
Copyright © 2011-2022 走看看