'print(some_object)' 的输出是什么意思?

What does the output from `print(some_object)` mean?

提问人:Chinmay Sahoo 提问时间:4/6/2023 最后编辑:KacheChinmay Sahoo 更新时间:4/11/2023 访问量:186

问:

Python 代码的输出是什么意思:

<class 'mediapipe.python.solution_base.SolutionOutputs'>

这是否意味着我们正在打印一个“mediapipe.python.solution_base”的对象。SolutionOutputs 的类?我的意思是,例如,如果我声明一个类,如下所示:

class Apple():
    def __init__(self):
        self.x = 45

    def temp(self):
        pass

然后我做了一个这个类的对象,

a = Apple()

然后如果我打印一个,比如

print(a)

我应该得到,

<class 'Apple'>
Python 对象 变量 输出

评论

3赞 slothrop 4/6/2023
使用类定义,尝试 和 .你看到打印类的实例打印类本身之间的区别了吗?print(Apple())print(Apple)
0赞 Barmar 4/6/2023
如果您在预期看到实例时看到此输出,这通常意味着您在创建实例时忘记写入。()
0赞 juanpa.arrivillaga 4/6/2023
这看起来像是的默认表示形式,而不是类的实例
0赞 juanpa.arrivillaga 4/6/2023
“我应该得到”你明白了吗?运行代码时会发生什么情况?

答:

0赞 Kache 4/6/2023 #1

以您的示例为例:Apple

class Apple:
    pass

a = Apple()

print(a)  # printing an instance of a class by using `a.__str__()`
#=> <__main__.Apple object at 0x11b02b6d0>

print(Apple)  # printing the class itself
#=> <class '__main__.Apple'>

a.__str__()默认情况下,返回一个字符串,其中包含类、它是对象以及存储它的内存地址。

1赞 CtrlZ 4/6/2023 #2

我将尝试通过示例进行解释。代码如下:

class Apple():
    ...

class Banana:
    def __str__(self):
        return 'I am a banana'

print(Apple()) # p1
print(Apple) # p2

print(Banana()) # p3
print(Banana) # p4

...输出如下:

<__main__.Apple object at 0x10afa4950>
<class '__main__.Apple'>
I am a banana
<class '__main__.Banana'>

如果我们将这个脚本(我们称之为 foo.py)作为 python foo.py 运行,那么我们的模块(分配给 __name__ 的值)将被__main__

在 p1 中,我们实例化了 Apple 的一个实例。print() 将尝试找到 __str__ dunder 方法的实现。如果它存在,它将执行它并发出返回的值。如果__str__不可用,它将查找__repr__并采取类似的行为。如果两者都不可用,它将显示模块名称、类名称及其 ID。这就是我们在第一行输出中看到的。

在 p2 中,我们正在打印类 - 而不是该类的实例。因此,没有要调用的 dunder 方法,我们只是看到它是 __main__ 模块中一个名为 Apple 的类。

在 p3 中,我们正在打印一个 Banana 类的实例,该类实现了__str__因此输出“我是香蕉”,如前所述。

在 p4 中,我们只是打印了该类,尽管它__str__实现,但这无关紧要,因为它不是该类的实例