我正在通过Rational课程并尝试学习in和out。我希望我的__init__
函数能够接受(int),(Rational,Rational),(Rational,int),(int,Rational)和(int,int)作为参数,但我不知道如何做到这一点。对我已有的任何建议,建议或修改?
class Rational(object):
def __init__(self,numerator=0,denominator=1):
'''Constructor for Rational'''
if denominator==0:
return 'Denominator cannot be zero.'
else:
self.n=numerator
self.d=denominator
return
答案 0 :(得分:2)
而不是返回,您想要raise ZeroDivisionError("Division by 0")
现在您的代码已经接受了Rational;但是你可能想对它们进行特殊处理。您可以在if:
中使用isinstance
if isinstance(n, Rational):
# ok n is not an int but a rational number...
然后重新计算n
和d
答案 1 :(得分:1)
最好的方法是将numerator
和denominator
保持为int
,因此如果其中一个或两个都不是int,请将它们转换为int,例如1,2/3
将导致3,2
。
Python已经有了理性,但命名为fractions,虽然派生自抽象类numbers.Rational
,但你可以看到source code的启示。
答案 2 :(得分:1)
您可以使用isinstance
。
这是一个可能的实现:
def __init__(self,numerator=0,denominator=1):
if isinstance(numerator,int) and isinstance(denominator,int):
self.n = numerator
self.d = denominator
else:
if isinstance(numerator,int):
numerator = Rational(numerator)
if isinstance(denominator,int):
denominator = Rational(denominator)
self.n = numerator.n*denominator.d
self.d = numerator.d*denominator.n
if self.d==0:
raise ZeroDivisionError()