我正在尝试制作一个简单的Python代码或shell,它允许我将其用作计算器......用于电路分析。理想情况下,我会使用Python的常规计算器来计算基于符号的等效电阻:R1 + R2表示串联的两个电阻,而R1 // R2表示并联的两个电阻。希望这意味着我可以像往常一样使用Python,例如:
>>> 1 + 1
2
>>> R1 = 1
>>> R2 = 2
>>> R1 + R2
3
因此,串联电阻足够简单(duh)。但是,当涉及并联电阻时,我想使用floor-division作为运算符,这将允许正常的算术组合:
>>> 2 // 2
1
>>> (R2 // 2) + R1
2
//除法定义为:
def __floordiv__(self, other):
return 1/(1/self.value + 1/other)
在做了一些研究之后,我明白不能覆盖整数和双精度等内置类。但是,我真的不想继承子类,因为这样就不会简单地将电阻值键入为原始类型。还有其他方法我可以做到这一点吗?我希望这是一个临时效果,只存在于一个小范围内,可以在shell文件的开头执行。谢谢!
答案 0 :(得分:3)
最好使用子类。使用int / double,您将无法使用电阻旁边的其他元素。您可以创建具有非常短名称的类,如“R”或电阻器,“C”用于电容器等。这将不会产生大量开销并且更具可读性
R(2) + R(2) == R(4)
R(2) // R(2) == R(2)
答案 1 :(得分:0)
您可以创建一个对象,使其看起来或多或少像您可以使用具有不同含义的整数文字。
例如,如果您正确定义p
对象的运算符,则可以使用如下语法:
2 + (p/ 3 // 2 // 10) + 4
或者,您可以这样做:
2 + (3 /_/ 2 /_/ 10) + 4
甚至:
2 + (3 /_/ 2 // 10) + 4
我可能只会在我自己做的项目中使用这种“操作员魔法”,或者它极大地提高了可读性。