我正在尝试实现我自己的复数类,以更好地理解类在 python 中的工作原理。 我一直在尝试替换 str 魔术方法来以 a+bi 格式打印复数。
def __str__(self):
out="%i" % self.real
if self.imaginary==0: return out
if self.imaginary>=0: out+="+%ii" % self.imaginary
else: out+="%ii" % self.imaginary
return out
我感兴趣的是编写这个没有吸引力的代码块的Pythonic方式,如果有任何方法可以实现这样一个事实:如果虚部为负,我应该得到a-bi,如果虚部为0我应该得到一个?
最佳答案
如果您使用的是 Python 3.6+,请按如下方式使用 f 字符串:
def __str__(self):
if self.imaginary == 0:
return f'{self.real}'
if self.real == 0:
return f'{self.imaginary}i'
return f'{self.real} {self.imaginary:+}i'
如果您使用的是 Python 3.6 之前的版本,则应使用 format。
def __str__(self):
if self.imaginary == 0: return '{}'.format(self.real)
if self.real == 0: return '{}i'.format(self.imaginary)
return '{} {:+}i'.format(self.real, self.imaginary)
我还改进了一些逻辑。基本上,当它没有虚部时,它仅返回实部,如果没有实部,则返回虚部。当它同时具有虚部和实部时,它返回复数。
请注意,两个点后面指定的 +
是格式。这种格式允许您打印虚部的符号。
示例
假设您的类名为CNumber
>>> x = CNumber(10, 1)
>>> str(x)
'10 +1i'
>>> x = CNumber(5, 0)
>>> str(x)
'5'
>>> x = CNumber(0, 3)
'3i'
>>> x = CNumber(1, -1)
'1 -1i'
如果您想要以下格式a + bi
def __str__(self):
if self.imaginary == 0: return f'{self.real}'
if self.real == 0: return f'{self.imaginary}i'
sign = '+' if self.imaginary > 0 else '-'
return f'{self.real} {sign} {abs(self.imaginary)}i'
关于python - python 中的魔术方法和 __str__ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138305/