python - python中类的__repr__方法的查询

标签 python

运行以下代码后,如 shell 上的 >>> python -i example.py

class Coordinate(object):
    def __init__(self, x, y):
        print('In init')
        self.x = x
        self.y = y

    def __repr__(self):
        print('In __repr__')
        return "Coord: " + str(self.__dict__)

def add(a, b):
    return Coordinate(a.x + b.x, a.y + b.y)

def sub(a, b):
    return Coordinate(a.x - b.x, a.y - b.y)

Coordinate(100, 200)
Coordinate(300, 200)

我看到输出为

PS C:\mystuff> python -i .\sample.py
In init
In init
>>>

继续该解释器 session ,如果我再次调用构造函数,如下所示,

>>> Coordinate(100, 200)
In init
In __repr__
Coord: {'y': 200, 'x': 100}
>>>

我看到控制进入了 __repr__() 方法。

我的问题: 当我们从sample.py文件中调用Cooperative(100, 200)时,为什么我们没有进入__repr__()方法?

最佳答案

发生这种情况是因为您没有显式调用任何 print .py 中的函数文件。在python解释器中,当你写一个句子时,它会立即打印结果,所以它会进入 __repr__功能。

如果您执行print您的 .py 中的声明code,__repr__ 返回的字符串将会被打印,除非你已经实现了 __str__函数,它更像是对象的“非正式”且通常更短的字符串表示。 __repr__根据 documentation 应该是一个有效的 python 表达式。如果没有__repr____str__方法是在你的类中实现的,默认情况下,python解释器不知道如何打印你的类的内容,所以它只是打印:<Coordinate object at 0x0000...> .

关于python - python中类的__repr__方法的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081601/

相关文章:

python - 如何让VLC点击通过

python - Django runserver错误: _frozen_importlib. _DeadlockError:由_ModuleLock ('django.test.signals'检测到死锁)在139824587568800

python - 如何在 pandas 中沿着时间戳对总和进行分组?

python - 具有可选返回值的 Python 函数中的惰性存储和代码执行

python - 用于动物分类的 Sklearn 模型

python - 多重排列,包括重复

python - 使用 PKCS#11 在 Python 中提供 SSL 连接

python json 自定义解码 LONG

python - 什么是相当于 R 的 `with` 的 python/pandas?

Python 日期/时间格式化