在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中实现新数据类型 - 没有类的主要内容,如果未能解决你的问题,请参考以下文章