python - 在 python 中重载 * 运算符(或模拟它)

标签 python overloading operator-keyword unpack

我想在 python 中重载 * 运算符。在 C++ 中,您可以重载取消引用运算符,以便您可以创建一个具有自定义方式的类来响应 *alpha

这个问题的一部分是我不确切地知道,我的意思是确切地知道 * 运算符(我称之为解包运算符)的作用。

那么我该如何重载它,或者模拟它的重载。

最终我希望能够做到:*alpha 具有自定义响应和返回值。


编辑:

感谢 Joe Kington 的评论,我找到了解决方案。由于 *alpha 根据 __iter__ 解包,所以我定义了一个可以继承的简单类来实现这一点。

顺便说一句,我想要这样做的原因是因为我想要一个漂亮的界面。

class Deref:
  def __deref__(self):
    pass

  def __iter__(self):
    yield self.__deref__()

class DerefTest(Deref):
  def __deref__(self):
    return '123cat'

if __name__ == '__main__':
  print(*DerefTest()) # prints '123cat'

最终我决定使用另一个一元运算符,因为我提供的实现并非在所有情况下都有效,所以我很失望。

最佳答案

我认为您没有正确理解一元 *** “运算符”。

他们将列表/字典解压缩为函数参数/关键字参数。在这种情况下没有其他意义。因此,它们不能重载。

实际上,在函数声明/调用之外的任何地方使用它们都是语法错误。

关于python - 在 python 中重载 * 运算符(或模拟它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722272/

相关文章:

需要上下文参数的python gRPC

python - 为什么我的图像上传到 Django Rest Framework 后无法读取?

c# - 泛型类中的方法重载

c++ - 除了用宏,不能用 C++ 表达自己

javascript - 包含还是包含?

python - 如何在 Python 的单元测试设置阶段实例化对象

python - 仅在 df pandas 中显示特定组

C++ 传递一个结构并传递一个可互换的指针?

c++ - 在派生类中重载基类方法

javascript - while (--i) 什么时候用?