运算符在python中重载

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

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

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

为了完成你的问题的答案:你不能定义新的操作员; 但是<<不是一个新的操作符,它是一个现有的操作符,并且通过在类中定义__lshift__方法来__lshift__

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

<<是一个运算符,并且可以用两种语言重载,这就是<<>> ,而不会丢失它们最初的左右移位的内涵,也成为C ++中的I / O格式化操作符(不是Python! – )。

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

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

是的,没有。 我不认为你可以定义你自己的操作符,但你可以重载现有的操作符 – 你可以通过覆盖操作符的特殊方法来实现。 例如,要覆盖>,可以覆盖__gt__() ,对于!= override __ne__()等。