gpt4 book ai didi

python - python 中的魔术方法和 __str__ 函数

转载 作者:行者123 更新时间:2023-12-01 00:31:34 24 4
gpt4 key购买 nike

我正在尝试实现我自己的复数类,以更好地理解类在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com