我创建了一个使用混合数字进行数学运算的类。
它需要两个字符串(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])
每种方法都需要每个变量进行数学运算
答案 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)])