- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
默认情况下,当IPython显示对象时,它似乎使用__repr__
.
__repr__
应该产生一个唯一的字符串,在适当的环境下可以用来重建一个对象。这与 __str__
不同,它应该产生人类可读的输出。
现在假设我们已经编写了一个特定的类,并且希望 IPython 默认生成人类可读的输出(即无需显式调用 print
或 __str__
)。我们不想通过让我们类(class)的 __repr__
来捏造它。做__str__
的工作。这将违反规则。
有没有办法告诉IPython调用__str__
默认情况下对于特定类?
最佳答案
这当然是可能的;您只需要实现实例方法_repr_pretty_(self)
。 documentation for IPython.lib.pretty
中对此进行了描述。 。它的实现可能如下所示:
class MyObject:
def _repr_pretty_(self, p, cycle):
p.text(str(self) if not cycle else '...')
p
参数是 IPython.lib.pretty.PrettyPrinter
的实例,您应该使用其方法来输出正在格式化的对象的文本表示形式。通常,您将使用 p.text(text)
,它只是将给定的 text
逐字添加到格式化表示中,但是如果您的类表示,您可以执行诸如开始和结束组之类的操作一个集合。
cycle
参数是一个 bool 值,指示是否检测到引用循环 - 也就是说,是否尝试在同一调用堆栈中两次格式化对象(这会导致无限循环) )。根据您使用的对象类型,可能有必要也可能没有必要考虑它,但这并没有坏处。
作为奖励,如果您想对您无权访问(或者更准确地说,不想)修改代码的类执行此操作,或者您只是想要进行临时更改以进行测试,可以使用 IPython 显示格式化程序的 for_type
方法,如this example of customizing int
display所示。在你的情况下,你会使用
get_ipython().display_formatter.formatters['text/plain'].for_type(
MyObject,
lambda obj, p, cycle: p.text(str(obj) if not cycle else '...')
)
MyObject
当然代表您想要自定义打印的类型。请注意,lambda 函数具有与 _repr_pretty_
相同的签名,并且工作方式相同。
关于ipython - 告诉 IPython 使用对象的 `__str__` 而不是 `__repr__` 进行输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41453624/
在 Python 3 中有没有一种方法可以以编程方式递归调用私有(private)成员变量唯一的 __str__ 函数?像这样的东西: class A: def __str__(self):
我正在用 Python 构建一个简单的类。我已经定义了我自己的 __str__ 方法,当我在类的一个实例上调用 print 时,它应该能很好地工作。当我创建该类的实例并对其调用 print 时,出现错
我一直在尝试创建一个理性类,并添加一个 __str__ dunder 方法返回 p(分子)除以 q(分母)。当我尝试打印对象 Rational_1 时,它只提供 init 方法的输出,并且不返回 __
当我尝试 __str__() 国外的方法它提供这个错误 __str__ returned non-string (type Product) 模型.py class Product(models.Mo
使用这样的嵌套模型: class Gov(models.Model): name = models.CharField(max_length=20) def __str__(self)
在 django __str__ 中有没有办法一次输出所有属性,而不是像我在这里做的那样一个一个输出?我计划拥有大约 100 个属性,因此将所有属性都放在 str 方法中似乎不正确。 class Ca
可以 __str__从字面上返回任何我的灵魂想要的东西? __str__ 上的文档状态: [...] the “informal” or nicely printable string represe
我在容器中打印用户定义的类实例时遇到了一些问题。简而言之,如果我的代码是: class A(): def __str__(self): return 'abc' class B
我是 Python 新手,但我一直遇到与此类似的问题 thread 我当前正在运行: Python 3.6.7 海湾合作委员会8.2.0 没有 IDE,只有普通的 *.py 文件 这是我的类(clas
您好,当我尝试打印我的对象时,我遇到了 __str__ 问题。解释器告诉我“TypeError:格式字符串的参数不足” 这是我正在尝试运行的代码! 'My Practice Class'
我正在尝试改进您在 codecademy python 类(class)中制作的“战舰”游戏,我决定我的第一步是实现类。 我预期的代码输出是五行 O O O O O。当我在 for 循环中只使用一个
这个问题在这里已经有了答案: functools.partial on class method (2 个答案) 关闭 5 年前。 我在尝试为一个程序编写 pretty-print 程序时遇到了这个
这是我的脚本: import math class Vector: def __init__(self, x=0.0, y=0.0): self.x = x s
我正在开发一个绘制线并找到中点的模块。出于测试目的,我想从相关类创建一些字符串输出。 class Line: def __init__(self, endpoints): self.sta
假设我有一个导入的模块,它工作正常但没有提供好的 __str__ 方法,我想添加一个。 在一些混合语言中: from foo import Foo Foo.prototype._str__ = fun
我了解到 __str__可以定义对象字符串的输出。 例子: class Person(object): def __init__(self, name): self.name
这个问题在这里已经有了答案: Why can't I replace the __str__ method of a Python object with another function? (2
在引发异常后,我试图覆盖 Python 中 Exception 子类的打印输出,但我没有运气让我的覆盖实际被调用。 def str_override(self): """ Overri
我想将 python 函数的字符串表示更改为函数名称。 例如某些功能 def blah(x): ... str(blah) 当前给出 所以我这样替换 __str__: blah.__str__=l
谁能告诉我 print sth 和 print str(sth) 之间的区别? 例如在 official documentation for sqlite3 的示例中,目前可以看到以下创建数据库的代码
我是一名优秀的程序员,十分优秀!