在Python中实现新数据类型 - 没有类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中实现新数据类型 - 没有类相关的知识,希望对你有一定的参考价值。

我正在尝试在Python中实现新的数据类型“Fractions”来表示分数,其中numenator和denominator都是整数。而且,我必须实现四个基本的算术运算。诀窍是,我不能在这个任务中使用类。我认为也许元组可能是一个好主意,但我真的不知道如何处理这个问题。有没有简单的方法来解决这样的问题?任何暗示都会对我有所帮助。

答案

你有两个问题。 1)如何封装数据,以及2)如何操作数据。

首先,让我们解决封装问题。把你需要的一切都放在元组中:

half = (1,2)
whole = (1,1)
answer = (42,1)

看到?第一项是分子,第二项是分母。

现在您需要一种操作数据的方法。由于我们不能使用方法,我们只使用常规函数:

def mul(a,b):
    'Multiply two fractions'
    return (a[0]*b[0], a[1]*b[1])

同样地,实施add(a,b)negate(a)sub(a,b)等。你可能需要一个simplify(),所以你不会在一段时间后最终得到10240000/20480000

为了使我们的面向对象的无类套件完整,我们需要一个构造函数:

def make_frac(num, denom):
    'Create a fraction with the indicated numerate and denominator'
    return (num, denom)

最后,将所有这些功能放在一个模块中,您的任务就完成了。你的图书馆的用户会写这样的东西:

import your_fraction_lib

half = your_fraction_lib.make_frac(1,2)
quarter = your_fraction_lib.mul(half, half)
three_quaters = your_fraction_lib.add(half, quarter)
另一答案

如果你想要老师,你可以做一些事情:

def construct(values):
    def mul(other_fraction):
        new_numerator = values['numerator']*other_fraction['values']['numerator']
        new_denominator = values['denominator']*other_fraction['values']['denominator']
        new_values = {'numerator':new_numerator,'denominator':new_denominator}
        return(construct(new_values))
    return({'values':{'numerator':values['numerator'],'denominator':values['denominator']},'mul':mul})

这允许您构造包含mul函数的对象,该函数非常类似于类方法:

x = construct({'numerator':1,'denominator':2})
y = construct({'numerator':3,'denominator':5})   
product = x['mul'](y)
print(product['values']['numerator'],product['values']['denominator'])
>>3 10

以上是关于在Python中实现新数据类型 - 没有类的主要内容,如果未能解决你的问题,请参考以下文章

在 Android M 中实现新权限 [重复]

Android导航组件不显示片段

如何以未使用的 x86 操作码在 linux KVM 中实现新指令

深入类和对象

在片段中实现 onClickListener

用于带词汇的Python单词袋编码