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

标签 python python-3.x

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

相关文章:

python - 删除不包含指定整数值的行(Pandas)

python - Keras 批量训练回调串联

python - 确定表达式中是否按下了键 (Python) (PyQT)

python - 实现 while 循环超时的最佳方法

python - 在通过管道读取标准输入的脚本中使用 pdb.set_trace()

python - 如何检查小写字母是否存在?

python - 需要下划线的否定环视或否定断言的正则表达式

python - 无法弄清楚如何通过套接字发送 2D 数组 - OSError : [WinError 10022]

python-3.x - Slack 上未显示交互式响应

python - 更改 Jupyter 笔记本内核所基于的虚拟环境后更新它