Сокращение класса с __init__ - PullRequest
0 голосов
/ 24 октября 2018

Я создал класс, который делает математику со смешанными числами.

Требуется две строки (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 голосов
/ 24 октября 2018

Вы не показываете классы, где вы могли бы использовать __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)

Если вы хотите использовать классы, тогда parse_mixed_number должен быть вызван в __init__:

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)])
...