【问题标题】:Shortening a class with __init__使用 __init__ 缩短类
【发布时间】:2018-10-24 19:17:29
【问题描述】:

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

它需要两个字符串(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])

每个方法都需要这些变量中的每一个来进行数学运算

【问题讨论】:

  • 当您尝试将它们放入 init 时,发生了什么?
  • 这里没有任何东西看起来像一个类。请显示更多代码。一个快速的建议是您可以从 split() 函数执行多个分配。它会阻止您对相同的数据执行 3 次相同的操作。例如coef1,frac1=f1.split('+'); num1,de1=frac1.split('/')

标签: python class methods init


【解决方案1】:

您没有显示任何课程,您可以在其中使用__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)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多