如何为某些方法而不是其他方法忽略__repr __()

时间:2019-06-23 19:28:16

标签: python jupyter

抱歉,我不太确定如何更准确地放置标题。

我有一个带有__repr__()的班级来报告班级的一些关键属性。

我的大多数方法都返回self,因此我可以使用菊花链方法。例如a.m1().m2()...

class Myclass:
    def __init__(self):
        self.a = 1
        self.b = "hello"

    def __repr__(self):
        msg = f"Myclass: a = {self.a}, b is {self.b}."
        return msg

    def plus(self, n):
        self.a += n
        return self

    def concat(self, s):
        self.b += s
        return self

    def play(self):
        # play audio here
        return self

ac = Myclass()
ac.plus(n=4)  # Ok i would like to see __repr__ output

ac.play()  # no I dont want to see __repr__

__repr__在Jupyter中非常有效,因为只需执行ac就可以为我提供一些关键属性的报告。但是,我有一个play()方法来播放音频,该方法也会返回self,并且我绝对不希望执行打印,因为有时我可能需要快速多次调用此方法。

有没有办法在我的所有方法中都使用return self,但不返回时调用__repr__

非常感谢

2 个答案:

答案 0 :(得分:2)

如果将结果分配给某个变量,则交互式输入不会调用__repr__

我愿意:

_ = ac.play()

使用匿名_变量来表明它是一次性的,这也保留了将所有函数结果隐式存储在_中的交互式解释器功能。

在速度方面,是的,因为没有调用__repr__,所以速度更快,并且无论如何都将分配_

答案 1 :(得分:1)

  

ac.play();-分号可防止IPython / Jupyter显示输出或将其分配给Out_

来自hpaulj's comment