当参数默认为None时使用__repr__,但可能是一个str

时间:2019-02-28 13:19:23

标签: python python-3.x repr

我有一个可以用几个参数初始化的类。其中一些参数的默认值为None,但如果提供了值,则应为str。我想从__repr()__获得一个不错的pythonic输出,但是无法在一个return语句中弄清楚如何处理None以及可能的str。我想避免使用各种返回语句,具体取决于参数是None还是str值。

一个基本示例:

class Demo:
    """Demo of how not to deal with None in __repr()__"""

    def __init__(self, w:int, x:int, y=None, z=None):
        self.w = w
        self.x = x
        self.y = y
        self.z = z

    def __repr__(self):
        return f"demo(w={self.w}, x={self.x}, y='{self.y}', z='{self.z}')"

以下是使用此类的两个示例:

>>> d1 = Demo(5, 4)
>>> d1
Demo(w=5, x=4, y='None', z='None')
>>> d2 = Demo(5, 4, 'me', 'you')
>>> d2
Demo(w=5, x=4, y='me', z='you')

请注意None用单引号引起来,这不是我想要的。但是meyou用引号引起来,鉴于它们是str,这是适当的。

1 个答案:

答案 0 :(得分:4)

repr函数中使用__repr__

def __repr__(self):
    return f"demo(w={self.w}, x={self.x}, y={repr(self.y)}, z={repr(self.z)})"

测试:

d = Demo(23,12,y='hello')
print(d)

demo(w=23, x=12, y='hello', z=None)