覆盖楼层分割操作

2024-06-28 15:52:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个简单的Python代码或shell,使我可以将其用作计算器……用于电路分析。理想情况下,我将使用Python的普通计算器根据符号计算等效电阻:R1+R2表示串联的两个电阻,而R1//R2表示并联的两个电阻。希望这意味着我可以像往常一样使用Python,例如:

>>> 1 + 1
2
>>> R1 = 1
>>> R2 = 2
>>> R1 + R2
3

所以串联电阻足够简单(duh)。然而,当谈到并联电阻器时,我想使用地板分割作为运算符,这将允许正常的算术组合:

^{pr2}$

其中//division定义为:

def __floordiv__(self, other):
    return 1/(1/self.value + 1/other)

在做了一些研究之后,我了解到诸如整数和double之类的内置类不能被重写。但是,我不想真正地将子类化,因为那样会失去简单地将阻力值作为基元类型键入的容易程度。我还有别的办法可以做到吗?我希望这是一个临时效果,它只存在于很小的范围内,并且可以在shell文件的开头执行。谢谢!在


Tags: 代码self情况shell计算器电路otherr2
2条回答

您可以创建一个对象,使其看起来或多或少像您可以使用具有不同含义的整数字面值。在

例如,如果您正确定义p对象的运算符,则可以使用如下语法:

2 + (p/ 3 // 2 // 10) + 4

或者,您可以这样做:

^{pr2}$

甚至:

2 + (3 /_/ 2 // 10) + 4

我可能只会在我自己做的项目中使用这种“操作符魔法”,或者如果它极大地提高了可读性。在

最好使用子类。有了int/double,你就不能使用电阻之外的其他元素了。你可以用很短的名称创建类,比如“R”或“resisters”,“C”代表电容器等,这样不会有太多开销,而且可读性更强

R(2) +  R(2) == R(4)
R(2) // R(2) == R(2)

相关问题 更多 >