python中的模块“operator”没有“rfloordiv”?

发布于 2024-11-03 09:21:17 字数 1024 浏览 0 评论 0 原文

假设我有 s 类,它有成员 opleftright (这是与 如何将求和或替换等操作分配给变量)。因此,在 op 中,我存储一个运算符,例如 - operator.addoperator.radd 等。但我想存储 operator.rfloordiv 并且这个类中没有这样的成员? :\ 但我可以重载__rfloordiv__,所以它确实存在。

这个想法是在需要时将 op 应用于 leftright

我的方法如下:在我的 op 中存储一些特殊字符串,然后在应用 op 之前检查 op 是否是字符串。如果是这样,请编写一个丑陋的 if-else 语句,以检查所有 - rfloordivrmodrtruediv。如果不是 - 只需将 op 与两个参数一起应用。但这太丑陋了..

有更好的方法来实现这一目标吗?

我知道这可以通过 lambda 函数来完成,但是如果我这样做,有什么方法可以查看这个 lambda 函数是什么(目前,当我需要查看什么是 op,我在 if 语句中检查它,如下所示: if self.op is operator.radd: .. ,但是如果 oplambda 函数怎么办?)

Suppose I have s class, that has members op, left, right (this is related question to How to assign an operation like sum or substitute, etc., to a variable ). So, in op I store an operator, for example - operator.add, operator.radd, etc. But I want to store operator.rfloordiv and there's no such member in this class? :\ But I can overload __rfloordiv__, so it does exist at all.

The idea is to apply op to left and right when needed.

My approach is as follows: store some special string in my op and then, before applying op, to check if op is string. If so, write an ugly if-else statement, to check for all - rfloordiv, rmod, rtruediv. If not - just apply op with both parameters. But this is damn ugly..

Is there a better way to achieve this?

I know that this could be done with lambda function, but if I do it like this, is there any way to see what is this lambda function (for the moment, when I need to see what is op, I check it in an if statement like this: if self.op is operator.radd: .., but what if op is lambda function ? )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子的影子 2024-11-10 09:21:17

大多数魔术运算符方法有两种类型:普通变体和以 r 为前缀的变体(例如 __add__()__radd()__)。如果您尝试添加 A 类型的对象 aB 类型的 b,Python 首先调用 A.__add__(a, b)。如果返回特殊值 NotImplemented,则调用 B.__radd__(b, a)

这两个魔术方法都与 operator 模块中的 operator.add 相对应。同样,魔术方法__floordiv__()__rfloordiv__()对应于operator.floordiv

Most magic operator methods come in two flavours: the plain variant and the variant prefixed with r (example __add__() and __radd()__). If you try to add the objects a of type A and b of type B, Python first calls A.__add__(a, b). If this returns the special value NotImplemented, B.__radd__(b, a) is called.

Both those magic methods corresond to operator.add in the operator module. Similarly, the magic methods __floordiv__() and __rfloordiv__() correspond to operator.floordiv.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文