如何在Python实例的初始化过程中调用某些方法
我是Python新手 初始化类如何在Python实例的初始化过程中调用某些方法,python,oop,Python,Oop,我是Python新手 初始化类Fraction的实例f后,我希望方法reduce已被调用,因此print结果在reduce之后 f = Fraction(3,6) print f #=> 1/2 not 3/6 代码如下: class Fraction(object): '''Define a fraction type''' def __init__(self, num=0, denom=1): '''Create a new Fraction wit
Fraction
的实例f
后,我希望方法reduce
已被调用,因此print
结果在reduce之后
f = Fraction(3,6)
print f #=> 1/2 not 3/6
代码如下:
class Fraction(object):
'''Define a fraction type'''
def __init__(self, num=0, denom=1):
'''Create a new Fraction with numerator num and denominator demon'''
self.numerator = num
if denom != 0:
self.denominator = denom
else:
raise ZeroDivisionError
def reduce(self):
gcd = findgcd(self.numerator, self.denominator)
self.numerator /= gcd
self.denominator /= gcd
def findgcd(self, x, y):
gcd = None
min_number = min(x, y)
for i in range(min_number, 1, -1):
if x % i == 0 and y % i == 0:
gcd = i
return gcd
def __repr__(self):
return "{0}/{1}".format(self.numerator, self.denominator)
是什么阻止您在
\uuu init\uuu
方法末尾调用self.reduce()
self.reduce()
,以便在实例化阶段调用方法reduce()
def reduce(self):
gcd = findgcd(self.numerator, self.denominator)
致:
findgcd
以下代码将修复您的问题:
class Fraction(object):
'''Define a fraction type'''
def __init__(self, num=0, denom=1):
'''Create a new Fraction with numerator num and denominator demon'''
self.numerator = num
if denom != 0:
self.denominator = denom
else:
raise ZeroDivisionError
self.reduce()
def reduce(self):
gcd = self.findgcd(self.numerator, self.denominator)
self.numerator /= gcd
self.denominator /= gcd
def findgcd(self, x, y):
gcd = None
min_number = min(x, y)
for i in range(min_number, 1, -1):
if x % i == 0 and y % i == 0:
gcd = i
return gcd
def __repr__(self):
return "{0}/{1}".format(self.numerator, self.denominator)
>>>> f = Fraction(3,6)
>>>> f
1/2
我可能会感到困惑,但听起来你只是想在你的uuu init_uuuu方法的末尾调用self.reduce(),
从分数导入分数
+1对于简单的答案,它是有效的,我知道我当时在想什么,感谢你的全面回答,并且+1形式指出了另一个错误self.gcd
。顺便说一句,我们的姓是一样的。“你是中国人吗?”yozloy很乐意帮忙!(是的:)准确地说是加拿大华人)太棒了!哇<代码>有线电视上的男人也是我的最爱!我一直在跟踪你twitter@yozloy很高兴找到像这部电影这样的人,所以:)
class Fraction(object):
'''Define a fraction type'''
def __init__(self, num=0, denom=1):
'''Create a new Fraction with numerator num and denominator demon'''
self.numerator = num
if denom != 0:
self.denominator = denom
else:
raise ZeroDivisionError
self.reduce()
def reduce(self):
gcd = self.findgcd(self.numerator, self.denominator)
self.numerator /= gcd
self.denominator /= gcd
def findgcd(self, x, y):
gcd = None
min_number = min(x, y)
for i in range(min_number, 1, -1):
if x % i == 0 and y % i == 0:
gcd = i
return gcd
def __repr__(self):
return "{0}/{1}".format(self.numerator, self.denominator)
>>>> f = Fraction(3,6)
>>>> f
1/2