Python—如何在不更改原始值的情况下从类返回值

Python—如何在不更改原始值的情况下从类返回值,python,class,return,Python,Class,Return,我有一个类似的代码。我的问题是我的代码改变了原始分数 class Fraction: """ This class represents one single fraction that consists of numerator and denominator """ def __init__(self, numerator, denominator): """ Constructor. Checks that the nume

我有一个类似的代码。我的问题是我的代码改变了原始分数

class Fraction:
    """ This class represents one single fraction that consists of
        numerator and denominator """

    def __init__(self, numerator, denominator):
        """
        Constructor. Checks that the numerator and denominator are of
        correct type and initializes them.

        :param numerator: fraction's numerator
        :param denominator: fraction's denominator
        """

        if not isinstance(numerator, int) or not isinstance(denominator, int):
            raise TypeError
        elif denominator == 0:
            raise ValueError

        self.__numerator = numerator
        self.__denominator = denominator

    def return_string(self):
        """ Returns a string-presentation of the fraction in the format
        numerator/denominator """

        if self.__numerator * self.__denominator < 0:
            sign = "-"
        else:
            sign = ""
        return "{:s}{:d}/{:d}".format(sign, abs(self.__numerator),
                                     abs(self.__denominator))

    def complement(self):
        """ Complement the fraction """
        self.__numerator=-1*self.__numerator
        return self

    def reciprocal(self):
        """ Reciprocal the fraction """
        new_numerator=self.__denominator
        new_denominator=self.__numerator
        self.__numerator=new_numerator
        self.__denominator=new_denominator
        return self
但它应该给我

>>> frac = Fraction(-2, 4)
>>> frac.return_string()
'-2/4'
>>> complement = frac.complement()
>>> complement.return_string()
'2/4'
>>> reciprocal = frac.reciprocal()
>>> reciprocal.return_string()
'-4/2'

因此,基本上我的问题是,当我返回分数的补码或倒数时,它会替换原始分数,但我希望原始分数保持不变。

补码和
倒数方法中,不是对自身进行变异,而是创建
分数的新实例并返回它

def complement(self):
  """ Complement the fraction """
  return Fraction(-1*self.__numerator, self. __denominator)

def reciprocal(self):
    """ Reciprocal the fraction """
    new_numerator=self.__denominator
    new_denominator=self.__numerator
    return Fraction(new_numerator, new_denominator)

使用
列表
作为
变量
,添加一些数据并检查步长。
def complement(self):
  """ Complement the fraction """
  return Fraction(-1*self.__numerator, self. __denominator)

def reciprocal(self):
    """ Reciprocal the fraction """
    new_numerator=self.__denominator
    new_denominator=self.__numerator
    return Fraction(new_numerator, new_denominator)