繁体   English   中英

如何添加两个不同类的变量?

[英]How do I add two variables of different classes?

我目前正在制作一个称为分数的 class 并且需要定义一个 function 将整数添加到这些分数。 我写的代码给出了错误:

回溯(最近一次通话最后):

文件“”,第 1 行,在 Breuk(1,3) + 1

类型错误:+ 不支持的操作数类型:“Breuk”和“int”

import math

class Breuk:
    def __init__(self, teller=1, noemer=1):
        self.teller = int(teller)
        self.noemer = int(noemer)
        while math.gcd(self.teller, self.noemer) != int(1):
            factor = math.gcd(self.teller, self.noemer)
            self.teller = int(self.teller / factor)
            self.noemer = int(self.noemer / factor)

    def __str__(self):
        return str(self.teller) + '/' + str(self.noemer)
    
    def __add__(self,other):
        if type(other) == int:
            other = Breuk(other, 1)
        elif type(self) == int:
            self.teller = self
            self.noemer = 1
        r = Breuk()
        r.teller = self.noemer*other.teller + self.teller*other.noemer
        r.noemer = self.noemer*other.noemer
        
        while math.gcd(r.teller, r.noemer) != 1:
            factor = int(math.gcd(r.teller, r.noemer))
            r.teller = int(r.teller / factor)
            r.noemer = int(r.noemer / factor)
        return r

我在测试代码时没有遇到这个问题,所以我认为没有什么问题,但是是的,你是对的。 原来你只需要添加这段代码:

def __radd__(self,other):
    if isinstance(other, int):
        other = Breuk(other, 1)
    elif type(self) == int:
        self.teller = self
        self.noemer = 1
    r = Breuk()
    r.teller = self.noemer*other.teller + self.teller*other.noemer
    r.noemer = self.noemer*other.noemer
    
    while math.gcd(r.teller, r.noemer) != 1:
        factor = int(math.gcd(r.teller, r.noemer))
        r.teller = int(r.teller / factor)
        r.noemer = int(r.noemer / factor)
    return r

调用5.add (Beurk(5, 3)) 将失败,然后它将调用 Beurk(5, 3)。 radd (5) 将起作用

它适用于我,但如果它不适合你,试试这个:

if isinstance(other, int):
    other = Breuk(other, 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM