无法调用类中定义的方法

2024-10-03 21:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行我的程序时,我得到一个“name not defined error”,即使我已经在类中定义了它。你知道吗

下面是我的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)

所以你们可以在我执行时告诉我上面代码中的一些错误,并捕捉到如下错误:

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

Tags: selfnewreturndefcommonotherprintstr
2条回答

gcd可能不属于类本身,但这会使代码正常工作:

def gcd(self, numerator, denominator):
    if numerator % denominator == 0:
        return denominator
    else:
        return self.gcd(denominator, numerator % denominator)

您可以使gcd成为一个实例方法

def gcd(self, numerator, denominator):

并使用self来调用它:

common = self.gcd(new_numerator, new_denominator)

或者,将其设为静态方法:

@staticmethod
def gcd(numerator, denominator):

并称之为:

common = Fraction.gcd(new_numerator, new_denominator)

有关实例和静态方法(以及类方法)的更多信息,请查看此问题的顶部答案:What is the difference between @staticmethod and @classmethod in Python?

相关问题 更多 >