用__init__缩短一个类

时间:2018-10-24 19:17:29

标签: python class methods init

我创建了一个使用混合数字进行数学运算的类。

它需要两个字符串(f1和f2),分别来自'1+1/4''3+1/5',并且可以加减乘或除它们。

我想知道是否可以使用__init__缩短代码 我可以只将f1和f2传递给__init__并减少重复吗?!

此刻,我必须将以下代码放入采用f1和f2的每个方法中

coef1 = int(f1.split('+')[0])
coef2 = int(f2.split('+')[0])
num1 = int(f1.split('+')[1].split('/')[0])
num2 = int(f2.split('+')[1].split('/')[0])
de1 = int(f1.split('+')[1].split('/')[1])
de2 = int(f2.split('+')[1].split('/')[1])

每种方法都需要每个变量进行数学运算

1 个答案:

答案 0 :(得分:0)

您没有显示任何可以使用__init__的类。 首先,您应该编写一个函数:

def parse_mixed_number(f):
    coef, numden = f.split('+')
    num, den = numden.split('/')
    return int(coef), int(num), int(den)

coef1, num1, den1 = parse_mixed_number(f1)
coef2, num2, den2 = parse_mixed_number(f2)

如果要使用类,则应该在__init__中调用parse_mixed_number:

from collections import namedtuple
class MixedNumber(namedtuple("MixedNumber", "coef,num,den")):
    def __new__(cls, f):
        coef, numden = f.split('+')
        num, den = numden.split('/')
        return tuple.__new__(cls, [int(coef), int(num), int(den)])