运算符在python中重载

Ahm*_*aik 43 python operator-overloading

可能重复:
Python:定义我自己的运算符?
在python中何时使用运算符重载的经验法则

是否有可能在Python中重载运算符?如果是这样,可以定义新的运算符,例如++<<

Ale*_*lli 71

正如其他答案所提到的,你确实可以重载运算符(通过定义你正在编写的类中的特殊方法,即名称以两个下划线开头和结尾的方法).所有细节都在这里.

要完成问题的答案:您无法定义新的运算符; 但<<它不是一个新的运算符,它是一个现有的运算符,它通过在类中定义方法来重载__lshift__.

作为一个历史记录,这也是C++中的情况 - 但是你可以重载的确切运算符集在两种语言之间有所不同.例如,在C++中,您不能重载属性访问,.; 在Python中,您可以使用__getattr__(或__getattribute__使用不同的语义)和__setattr__.反之亦然,在Python =(普通赋值)中不是运算符,所以你不能重载它,而在C++中它是一个运算符,你可以重载它.

<<是运营商,并且可以被重载,这两种语言-这是怎么<<>>,同时不失去自己的左,右偏移的初始内涵,也成为I/O格式化运营商在C++(不是在Python - !).


mik*_*iku 6

请参阅:http://docs.python.org/reference/datamodel.html#special-method-names.

类可以通过定义具有特殊名称的方法来实现由特殊语法(例如算术运算或下标和切片)调用的某些操作.这是Python的运算符重载方法,允许类根据语言运算符定义自己的行为.