Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法调用类中定义的方法_Python - Fatal编程技术网

Python 无法调用类中定义的方法

Python 无法调用类中定义的方法,python,Python,当我运行我的程序时,我得到一个“名称未定义错误”,即使我已经在类中定义了它 以下是我的Python代码: class Fraction(object): """docstring for Fraction""" def __init__(self, numerator, denominator): self.numerator = numerator self.denominator = denominator def show(self

当我运行我的程序时,我得到一个“名称未定义错误”,即使我已经在类中定义了它

以下是我的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
回溯(最近一次呼叫最后一次):
文件“fraction.py”,第31行,在
打印(细分1+细分2)
文件“fraction.py”,第17行,添加__
公共=分数.gcd(新分子,新分母)
gcd中第24行的“fraction.py”文件
返回gcd(分母,分子%分母)
NameError:未定义名称“gcd”

您可以将
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)

有关实例和静态方法(以及类方法)的更多信息,您可以查看此问题的顶部答案:

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

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

您的方法需要将
self
作为第一个参数(总共3个),并且必须被称为
self.gcd(分子、分母)
。。。。或者如果你想做一个静态方法(因为OP似乎知道
self
,你可以做
Fraction.gcd(…)
谢谢你的回答,Szymon!但是我尝试了这个解决方案并发现了其他错误:
TypeError:gcd()接受2个位置参数,但给出了3个位置参数