python中的重载*运算符(或模拟它)
作者:互联网
我想在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'
最后我只是决定使用另一个一元运算符,因为我给出的实现在所有情况下都不起作用,所以我很失望.
解决方法:
我认为你没有正确理解一元*和**“运算符”.
他们将list / dict解压缩到函数参数/关键字参数中.在这种情况下没有其他任何有意义的东西.因此,它们不能超载.
实际上,使用它们是语法错误,但在函数声明/调用中.
标签:unpack,python,overloading,operator-keyword 来源: https://codeday.me/bug/20190826/1730262.html