[英]How do I get functions from two different classes in two different files to communicate with each other?
[英]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.