Python 了解所有变量是如何成为对象的

Python 了解所有变量是如何成为对象的,python,Python,据说python中的一切都是对象,我无法理解为什么以下代码以不同的方式工作: foo=Foo() print(foo) 输出: 产出:10 现在,如果一切都是对象,那么为什么printa不打印printfoo所做的事情呢?print通过调用对象的_str__方法来显示对象的字符串表示形式。Foo似乎继承了默认的_str _;,它返回一个显示对象类型和标识的字符串。int返回一个字符串,显示其值的十进制表示形式。当您使用print时,您要求Python显示对象的可视表示形式,以便我们可以看到它是

据说python中的一切都是对象,我无法理解为什么以下代码以不同的方式工作:

foo=Foo()
print(foo)
输出:

产出:10

现在,如果一切都是对象,那么为什么printa不打印printfoo所做的事情呢?

print通过调用对象的_str__方法来显示对象的字符串表示形式。Foo似乎继承了默认的_str _;,它返回一个显示对象类型和标识的字符串。int返回一个字符串,显示其值的十进制表示形式。

当您使用print时,您要求Python显示对象的可视表示形式,以便我们可以看到它是什么。要打印对象,它必须有一个方法\uuuu str\uuuuuuuuuu或\uuuu repr\uuuuuuuuuu

对于字符串或整数123这样的简单对象,键入print123时将使用_str_uu方法。 然后将该方法设置为显示整数值

但是对于更复杂的对象,尤其是程序员创建的对象,如果您没有实现自己的_ustr_______________________

一旦您对面向对象编程有了更深入的了解,您将能够创建自己的_ustr_uuuuuuu和_repr_uuuuuu方法,这些方法将覆盖Python使用的基本方法,并显示该对象所需的任何信息

希望能有点帮助


Tomasz Kluczkowski

它们都是对象,但有不同的实现。它们都打印一些东西。不需要打印十六进制ID,这只是没有更好表示的类的默认实现。这两个对象都有一个id,请参见ida和idfoo。感谢@Martijn Pieters,我想我应该阅读python文档,顺便说一下,在我的问题的扩展部分中,当在python中调用任何函数时,是否意味着调用该函数的对象内的另一个函数来执行代码。如果REPL显示该对象,则使用__打印显示对象时使用str_u;。但是,默认的_str_uuuuuuuuuuuuuuuuuuuuuuuu委托给_uuuuuurepr_uuuuuuuuu。
a=10
print(a)