调用类时,加括号和不加括号的区别

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

a = ListNodea.val = 1print(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))   # 1324811791128print(id(a))   # 1324811791128print(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 = clsTestprint(x.y)  # None

x = clsTest()print(x.y)  # 你

原文地址:https://www.cnblogs.com/chengege/p/10275648.html

时间: 2024-09-29 02:31:59

调用类时,加括号和不加括号的区别的相关文章

new一个对象后面加括号与不加括号的区别

new一个对象后面加括号与不加括号的区别 ? 加括号与不加的区别 (1)加括号 ??? 1. 若括号为空,即无实参项,那么理解为调用默认构造函数: ??? 2. 若括号非空,即有实参项,可以理解为调用重载构造函数,或 复合默认构造函数. (2)不加括号 调用默认构造函数,或复合默认构造函数. 默认构造函数 与 复合默认构造函数的区别 默认构造函数:编译器会为每一个类默认提供一个构造函数,称之为默认构造函数.默认构造函数一般参数为空. 复合默认构造函数:一个由用户自定义的所有形式参数都赋有默认值的

函数基础重点掌握内容:创建函数、return返回单个值、return返回多个值、函数名加括号与不加括号的区别

##比较两个数大小 #有参函数!!! def compare(s,t): if s > t: print(s) else: print(t) f=compare compare(1000,30) f(1800,30) """有几个参数传几个参数,形参对应实参,一个也不能少""" ''' 2.函数名加括号与不加括号的区别: 函数名加括号与不加括号的区别: --在这个函数中,return返回的是inner, 内部其实是返回inner函数的运行结

onclick时间加return和不加return的区别

JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置.而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是false时,将中断操作.而直接执行时(不用return).将不会对window.event.returnvalue进行设置所以会默认地继续执行操作详细说明如下:例如:当在 <a href="abc.htm" onclick="return add_onclick()&quo

Java中主类中定义方法加static和不加static的区别

Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量被static修饰后的所有类的共享属性 b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化 4.This关键字的用法 this:是当前类的对象引用.简单的记,它就代表当前

js调用函数时加括号与不加括号的区别

函数名其实就是指向函数体的指针 不加括号, 可以认为是查看该函数的完整信息, 不加括号传参,相当于传入函数整体 加括号 表示立即调用(执行)这个函数里面的代码(花括号部分的代码) 例2: function demo(){    return 1}var a=demovar b=demo()a是demo函数,b是1

new对象时,类名后加括号与不加括号的区别

[1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 // 空类 5 class empty 6 { 7 }; 8 9 // 一个默认构造函数,一个自定义构造函数 10 class Base 11 { 12 public: 13 Base() 14 { 15 cout << " default Base construct " &

闭包函数之函数加括号和不加括号的意义

import time # 闭包函数 def outer(): x = 100 def inner(): print(x) return inner fun = outer() print(fun) #函数不加括号,调用的是函数本身[function] # <function outer.<locals>.inner at 0x0000000001F151E0> time.sleep(5) fun() #函数加括号,调用的是函数的return结果. time.sleep(5) pr

关于vue ,v-on 绑定事件时,函数名加括号和不加括号的区别

作者:DDFE链接:https://www.zhihu.com/question/55753541/answer/146504270来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 从官方的文档 事件处理器 - Vue.js 中可以看出通过 `v-on` 中既可以执行一段代码.一个方法.内联 JavaScript 语句,根据不同的情况 Vue 会做不同的处理,具体可以从源码中可以看出(2.1.10版本),在编译阶段,会根据抽象HTML语法树生成代码,从 https:

typeof加括号和不加括号的区别

typeof是一个一元运算符,并不是一个函数或者语句,所以可以用括号包裹起来tostring的用法      返回该对象的字符串表示.通常, toString 方法会返回一个“以文本方式表示”此对象的字符串.结果应是一个简明但易于读懂的信息表达式.建议所有子类都重写此方法.Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例) 原文地址:https://www.cnblogs.com/zycs/p/12340947.html