当前位置: 首页 > 面试题库 >

python中的运算符重载

楚灿
2023-03-14
问题内容

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


问题答案:

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

要完成对您问题的回答:您不能定义新的运算符;但是<<它不是一个新的运算符,它是一个现有的运算符,并且通过在类中定义method来使其过载__lshift__

作为历史记录,这在C 中几乎也是这种情况-但是,您可以重载的运算符的确切集合在两种语言之间有所不同。例如,在C

中,您不能重载属性访问.;在Python中,您可以使用__getattr__(或__getattribute__使用不同的语义)和__setattr__。反之亦然,在Python
=(普通赋值)中,它不是运算符,因此您不能重载它,而在C ++中,它是运算符,您可以重载它。

<<是一种运算符,并且在两种语言中都可以重载,这就是<<and的方式>>,同时又不失去其左右移的初始含义,同时也成为了C ++中的I /O格式化运算符(不是Python!-)。



 类似资料:
  • 问题内容: 我最近了解了python中的运算符重载,并且我想知道以下情况是否可能。 考虑以下假设/人为的类。 我知道上面写的方式,我可以做这样的事情 这些将按预期工作。我也知道目前的书写方式我无法做到这一点 有没有办法解决?我知道这个例子是人为设计的,但是我有一个应用程序,如果当我进行运算符重载时,为它定义运算符的类可以出现在运算符的右侧,它将非常有用。这可能在python中吗? 问题答案: 是。

  • 问题内容: 什么是运营商吗?例如,以下操作做什么? 问题答案: 它是右移操作符,将所有位向右“移动”一次。 二进制10是 1010 移到右边变成 0101 这是5

  • 问题内容: 请告诉我Java是否可以重载运算符?如果可以在Java中的任何地方使用它,请告诉我。 问题答案: 不,Java不支持用户定义的运算符重载。Java唯一接近“自定义”运算符重载的方面是对字符串+的处理,这将导致常量的编译时串联或使用StringBuilder / StringBuffer的执行时串联。但是,您无法定义自己的操作符,它们的操作方式相同。 对于确实支持运算符重载的类Java(

  • 问题内容: 给定以下JavaScript“类”定义,这是我想到此问题的最佳方式: 以及以下测试设置代码: 有什么方法可以使用加法运算符隐式创建为对象,如下所示… 而不是求助于… 如果不是,那么在此领域中关于通过算术运算符使自定义数字JavaScript对象可组合的最佳实践建议是什么? 问题答案: 据我所知,JavaScript(至少现在已经存在)不支持运算符重载。 我能建议的最好的方法是使用一个类

  • 前面章节介绍了 Python 中的各个序列类型,每个类型都有其独特的操作方法,例如列表类型支持直接做加法操作实现添加元素的功能,字符串类型支持直接做加法实现字符串的拼接功能,也就是说,同样的运算符对于不同序列类型的意义是不一样的,这是怎么做到的呢? 其实在 Python 内部,每种序列类型都是 Python 的一个类,例如列表是 list 类,字典是 dict 类等,这些序列类的内部使用了一个叫作

  • Rust可以让我们对某些运算符进行重载,这其中大部分的重载都是对std::ops下的trait进行重载而实现的。 重载加法 我们现在来实现一个只支持加法的阉割版复数: use std::ops::Add; #[derive(Debug)] struct Complex { a: f64, b: f64, } impl Add for Complex { type Outpu