【发布时间】:2017-09-25 16:53:10
【问题描述】:
我搜索过有关转换课程的类似问题,但没有一个对我有真正帮助。
我有一个 Fraction 类,如果可能,我想将它简化为一个 int。
class Fraction:
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
self.simplify()
if self.denominator == 1:
# convert self to int of value numerator
我在 Fraction 类中有一个函数,它可以在创建分数时简化分数(2/6 变为 1/3,等等)
def simplify(self):
div = gcd(self.numerator, self.denominator)
self.numerator //= div
self.denominator //= div
我目前对这个问题的解决方法如下:
def convert(fraction):
if fraction.denominator == 1:
return fraction.numerator # int
else:
return fraction # Fraction
f = Fraction(3, 1)
f = convert(f)
我在各种代数表达式中使用这些分数,所以我希望它们尽可能简单。例如。 1/2 + 1/2 = 1(而不是 1/1)
有什么方法可以将 Fraction 对象转换为 int 而不必每次都通过这个外部函数?
谢谢
【问题讨论】:
-
即使这是可能的,我也不建议这样做。我可以看到动态更改对象的类型,使代码难以推理。
convert返回两种不同类型的事实也并不理想。在使用返回值之前,您不需要进行手动类型检查吗? -
你知道python已经提供了Fraction类吗?可能对你有帮助:docs.python.org/3.6/library/fractions.html
-
是的,还认为动态更改对象的类型不是正确的方法。
-
Carcigenicate,convert 函数只是我为了展示我想要完成的事情而拼凑起来的。我的课程可以处理整数和分数作为输入。 (用于嵌套分数等)
-
MiguelSR,内置的分数类对于我打算做的事情来说不够灵活。它最终将处理未知术语,例如。 2x^2。不过我事先并不知道这门课,所以谢谢你:)
标签: python python-3.x