在Python中是否可以重载运算符?如果可以,是否可以定义新的运算符,例如++
和<<
?
在Python中是否可以重载运算符?如果可以,是否可以定义新的运算符,例如++
和<<
?
正如其他答案所提到的,您确实可以重载操作符(通过在编写的类中定义特殊方法,即名称以两个下划线开头和结尾的方法)。所有详细信息在这里。
为了回答您的问题:您不能定义新操作符;但是<<
不是新操作符,而是现有的操作符,并且可以通过在类中定义方法__lshift__
来进行重载。
作为历史注释,这在C++中也是类似的情况--但是您可以重载的确切一组运算符在两种语言之间有所不同。例如,在C ++中,您无法重载属性访问.
; 在Python中,您可以使用__getattr__
(或具有不同语义的__getattribute__
)和__setattr__
。反之,在Python中,=
(普通赋值)不是运算符,因此您无法重载,而在C ++中它是运算符,您可以对其进行重载。
<<
在两种语言中都是操作符,并且可以进行重载--这就是为什么<<
和>>
在C ++中成为I / O格式化操作符(而不是在Python中!)的初始涵义仍然不变。
参见: http://docs.python.org/reference/datamodel.html#special-method-names.
通过定义具有特殊名称的方法,类可以实现由特殊语法(例如算术运算或下标和切片)调用的某些操作。这是Python对运算符重载的处理方式,允许类定义其相对于语言运算符的行为。
__gt__()
,对于 != 覆盖 __ne__()
等等。