首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自C++的Python中的操作符重载

来自C++的Python中的操作符重载
EN

Stack Overflow用户
提问于 2017-07-25 10:43:08
回答 1查看 419关注 0票数 1

我正在尝试重载Python类中的一些操作符,它表示一个数学部分。特别是,我试图重载*操作符,这样就可以进行分数*分数、分数*整数和整数*分数运算。我对C++有过一些经验,在这种情况下,我会编写操作符重载,如分数类中的那样:

代码语言:javascript
运行
复制
friend Fraction operator*(const Fraction &f1, const Fraction &f2);
friend Fraction operator*(const Fraction &f, int v);
friend Fraction operator*(int v, const Fraction &f);

我的理解是,C++知道根据您给出的参数来解析哪个函数。但是,由于在Python中没有输入函数参数,所以我不知道Python如何知道要解析哪个操作符重载?例如:

代码语言:javascript
运行
复制
def __mul__(self, other):
    return Fraction(self.numerator * other.numerator, self.denominator * other.denominator)

def __mul__(self,value):
    return Fraction(self.numerator * value,self.denominator)

第一个重载将用于两个分数,第二个重载将用于一个分数和一个整数,但是Python如何知道使用哪一个呢?虽然我已经使用C++一段时间了,但我对Python完全陌生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 10:46:37

Python根本不会按类型解析函数。首先只能有一个名为__mul__的方法,而不是具有不同签名的该方法的多个版本。如果有必要,您必须在该方法中手动进行类型解析:

代码语言:javascript
运行
复制
def __mul__(self, other):
    if isinstance(other, int):
        ...

请注意,尽可能多地使用鸭子类型是pythonic的,所以您可能希望检查hasattr(other, 'numerator')而不是严格的isinstance检查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45300957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档