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.
类
Human
不接受任何参数,甚至没有 __init__
方法。如果我在创建 Human
的实例时无法给出任何参数,那么为什么我需要括号呢?
我什至不知道我不明白什么,但我觉得我错过了一些东西。可能是关于
self
的事情。
在调用函数/方法/宏采用以下形式的语言中
foo(param1, param2, param3)
那么几乎普遍正确的是,如果
foo
不带任何参数,则调用将是
foo()
进一步说,取决于语言
foo
要么不正确,要么有其他含义。
现在让我们考虑一下你的例子,稍微扩展一下
H1 = Human
H2 = Human
H3 = Human
在这种情况下,什么也没有被调用。
H1
、H2
和H3
都被分配了相同的引用,这是对类Human
的引用,而不是对该类的任何实例的引用。
H1 = Human()
H2 = Human()
H3 = Human()
在本例中,该类被实例化 3 次,这意味着
__init__
函数单独运行了 3 次,每次的结果都是 Human
的不同 实例。
H1
、H2
和 H3
现在指向三个不同的对象,都是 Human
的实例。由于它们是实例,因此它们有一个 self
。
我们需要澄清一些要点:
要在主要编程语言中调用/调用类/函数,您必须使用括号
类/函数名称只是指代其在内存中的对象,因此在不使用括号的情况下,我们实际上指的是类/函数对象
当我们使用括号时,我们实际上调用/调用类/函数代码并且代码被执行