为什么实例化类时需要括号? [重复]

问题描述 投票:0回答:2
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
的事情。

python class instantiation
2个回答
2
投票

在调用函数/方法/宏采用以下形式的语言中

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


0
投票

我们需要澄清一些要点:

  1. 要在主要编程语言中调用/调用类/函数,您必须使用括号

  2. 类/函数名称只是指代其在内存中的对象,因此在不使用括号的情况下,我们实际上指的是类/函数对象

  3. 当我们使用括号时,我们实际上调用/调用类/函数代码并且代码被执行

© www.soinside.com 2019 - 2024. All rights reserved.