我有一个可以用几个参数初始化的类。其中一些参数的默认值为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
用单引号引起来,这不是我想要的。但是me
和you
用引号引起来,鉴于它们是str
,这是适当的。
答案 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)