【问题标题】:Overload angle brackets in Python在 Python 中重载尖括号
【发布时间】:2015-01-23 13:21:45
【问题描述】:

很奇怪的问题,但是否有可能重载某些括号类型的含义,例如<, >, [, ] and | 在 Python 中。例如,如果我有一些对象实例MyObj1 和MyObj2,我是否可以设计一些东西,从而将<MyObj1 | MyObj2 > 理解为MyObj1 中的方法调用?

我认为它可能不能/不应该做,但我想我会问!

【问题讨论】:

  • Uhhhhh... 为什么? 编辑:另外,不,除非你分叉 CPython 并自己编写代码来支持它,否则这是不可能的。
  • 虽然你可以重载操作符,但是你不能改变它们的arity。 < 和 > 都是需要两个操作数的二元运算符,即使您重载它们也是如此。
  • 是的,我认为这可能有点遥远,但通过快速解释,我想写一些东西来方便地以语法相似的方式计算 Bra-Kets (en.wikipedia.org/wiki/Bra%E2%80%93ket_notation)跨度>

标签: python operator-overloading overloading


【解决方案1】:

没有。 Python 中唯一允许的运算符重载是更改预先存在的运算符的运行时语义。语法<MyObj1 | MyObj2 > 将涉及将< 和> 变成一元运算符(一个前缀,一个后缀)或将它们都变成一个“circumfix”运算符。由于它们目前都是二进制中缀运算符,因此无法进行此类更改。

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 2021-11-06
    • 2012-02-03
    • 1970-01-01
    • 2021-05-29
    • 2017-08-24
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多