为什么在实例化 class 时需要括号?
Why do I need parentheses when instantiating a class?
class Human:
def exist(self)
return print("exists")
H1 = Human # Why do I need parentheses here? I get error if i dont put parentheses here.
H1.exist() # I get an error that says parameter 'self' unfilled.
Class Human 不接受任何参数,甚至没有 __init__
方法。所以在创建 Human
的实例时我不能给出任何参数,所以为什么我需要括号?
我什至不知道我不明白什么,但我觉得我错过了什么。可能是关于 self
.
在 function/method/macro 的调用形式为
的语言中
foo(param1, param2, param3)
那么几乎普遍正确的是,如果 foo
不带任何参数,调用将是
foo()
此外,取决于语言
foo
要么不正确,要么有其他含义。
现在让我们考虑一下你的例子,稍微扩展一下
H1 = Human
H2 = Human
H3 = Human
在这种情况下,没有调用任何东西。 H1
、H2
和 H3
都分配了相同的引用,这是对 class Human
而非任何 的引用class.
的实例
H1 = Human()
H2 = Human()
H3 = Human()
在这种情况下,class被实例化 3次,这意味着__init__
函数被运行单独实例化了3次,每个结果都是 Human
的不同 实例 。 H1
、H2
和 H3
现在指向三个不同的对象,即 Human
的所有实例。由于它们是实例,因此它们具有 self
.
我们需要澄清几点:
到call/invoke一个class/function编程语言专业你得用括号
class/function 名称只是指它在内存中的对象,因此在不使用括号的情况下,我们实际上指的是 class/function 对象
当我们使用括号时,我们实际上 call/invoke class/function 代码和代码得到执行
class Human:
def exist(self)
return print("exists")
H1 = Human # Why do I need parentheses here? I get error if i dont put parentheses here.
H1.exist() # I get an error that says parameter 'self' unfilled.
Class Human 不接受任何参数,甚至没有 __init__
方法。所以在创建 Human
的实例时我不能给出任何参数,所以为什么我需要括号?
我什至不知道我不明白什么,但我觉得我错过了什么。可能是关于 self
.
在 function/method/macro 的调用形式为
的语言中foo(param1, param2, param3)
那么几乎普遍正确的是,如果 foo
不带任何参数,调用将是
foo()
此外,取决于语言
foo
要么不正确,要么有其他含义。
现在让我们考虑一下你的例子,稍微扩展一下
H1 = Human
H2 = Human
H3 = Human
在这种情况下,没有调用任何东西。 H1
、H2
和 H3
都分配了相同的引用,这是对 class Human
而非任何 的引用class.
H1 = Human()
H2 = Human()
H3 = Human()
在这种情况下,class被实例化 3次,这意味着__init__
函数被运行单独实例化了3次,每个结果都是 Human
的不同 实例 。 H1
、H2
和 H3
现在指向三个不同的对象,即 Human
的所有实例。由于它们是实例,因此它们具有 self
.
我们需要澄清几点:
到call/invoke一个class/function编程语言专业你得用括号
class/function 名称只是指它在内存中的对象,因此在不使用括号的情况下,我们实际上指的是 class/function 对象
当我们使用括号时,我们实际上 call/invoke class/function 代码和代码得到执行