[英]Unable to call method defined in class
I'm getting a "name not defined error" when I run my program, even though I have defined it in the class. 即使我在类中定义了程序,运行程序时仍收到“未定义名称的错误”。
Here is my Python code: 这是我的Python代码:
class Fraction(object):
"""docstring for Fraction"""
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
def show(self):
print(self.numerator, "/", self.denominator)
def __str__(self):
return str(self.numerator) + "/" + str(self.denominator)
def __add__(self, other_fraction):
new_numerator = self.numerator*other_fraction.denominator + self.denominator*other_fraction.numerator
new_denominator = self.denominator*other_fraction.denominator
common = gcd(new_numerator, new_denominator)
return Fraction(new_numerator//common, new_denominator//common)
def gcd(numerator, denominator):
if numerator % denominator == 0:
return denominator
else:
return gcd(denominator, numerator % denominator)
fraction1 = Fraction(3, 5)
fraction2 = Fraction(8, 9)
print(fraction1 + fraction2)
So you guys can tell me some wrong in above code when I execute and catch an error as bellow: 因此,当我执行并发现以下错误时,你们可以在上面的代码中告诉我一些错误:
Traceback (most recent call last):
File "fraction.py", line 31, in <module>
print(fraction1 + fraction2)
File "fraction.py", line 17, in __add__
common = Fraction.gcd(new_numerator, new_denominator)
File "fraction.py", line 24, in gcd
return gcd(denominator, numerator % denominator)
NameError: name 'gcd' is not defined
You can make gcd
an instance method 您可以将
gcd
实例方法
def gcd(self, numerator, denominator):
and use self
to call it: 并使用
self
来调用它:
common = self.gcd(new_numerator, new_denominator)
Alternatively, make it a static method: 或者,将其设为静态方法:
@staticmethod
def gcd(numerator, denominator):
and call it: 并称之为:
common = Fraction.gcd(new_numerator, new_denominator)
You can check the top answer to this question for more on instance and static methods (and class methods too): What is the difference between @staticmethod and @classmethod in Python? 您可以查看该问题的最高答案,以获取更多有关实例和静态方法(以及类方法)的信息: Python中的@staticmethod和@classmethod有什么区别?
gcd
probably does not belong in the class itself, but this should make your code work: gcd
可能不属于该类本身,但这应该可以使您的代码正常工作:
def gcd(self, numerator, denominator):
if numerator % denominator == 0:
return denominator
else:
return self.gcd(denominator, numerator % denominator)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.