将对象转换为另一个类

时间:2017-09-25 16:53:11

标签: python python-3.x

我搜索过类似的关于转换课程的问题,但没有一个真正帮助过我。

我有一个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而不必每次都通过这个外部函数传递它?

由于

1 个答案:

答案 0 :(得分:1)

你可以做几件事:

  • 拥有一个返回两种不同类型的函数是不理想的,因此您可以使用类方法处理转换。
  • 如果print()func以及
  • 支持转换,也会有所帮助

考虑到这一点,我只是在课堂内移动了转换,并添加了 str 方法。

from fractions import gcd

class Fraction:
    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator
        self.simplify()

    def __str__(self):
        if self.denominator == 1:
            return str(self.numerator)
        return '{}/{}'.format(self.numerator,self.denominator)

    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
        return fraction # Fraction

if __name__ == '__main__':
    f = Fraction(6, 2)
    c = Fraction.convert(f)
    print(f)
    print(c)
    f2 = Fraction(3, 4)
    print(f2)

看看它是否可以帮到你。