Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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_Oop_Recursion - Fatal编程技术网

面向对象Python中的递归函数调用

面向对象Python中的递归函数调用,python,oop,recursion,Python,Oop,Recursion,所以我最近开始用Python进行面向对象编程,对于一个特定的问题,我必须编写一个处理分数的类。一切似乎都进展顺利,常见的数学运算符的书写方法,如减法和加法;但是,我一直使用递归方法 class fractions(): def __init__(self, numerator, denominator): self.numerator = numerator self.denominator = denominator def GreatestCo

所以我最近开始用Python进行面向对象编程,对于一个特定的问题,我必须编写一个处理分数的类。一切似乎都进展顺利,常见的数学运算符的书写方法,如减法和加法;但是,我一直使用递归方法

class fractions():
    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator
    def GreatestCommonDivisor(self, numerator, denominator): # This is the culprit
        if numerator%denominator == 0:
            return denominator
        else:
            return GreatestCommonDivisor(self, denominator, numerator%denominator)
当我在另一种方法中调用最大公约数函数,需要找到分子的最大公约数时,我得到:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Wing IDE 101 3.2\src\debug\tserver\_sandbox.py", line 1, in <module>
    # Used internally for debug sandbox under external interpreter
  File "C:\Program Files (x86)\Wing IDE 101 3.2\src\debug\tserver\_sandbox.py", line 9, in GreatestCommonDivisor
NameError: global name 'GreatestCommonDivisor' is not defined 

如果有人能告诉我这里的问题是什么以及如何解决它,我将不胜感激,这是我第一次在类中使用递归函数

这一行是发生NameError的地方:

return GreatestCommonDivisor(self, denominator, numerator%denominator)
应改为:

return self.GreatestCommonDivisor(denominator, numerator % denominator)

GreatestCommonDivisor是一个实例方法,而不是全局方法。你需要做什么

return self.GreatestCommonDivisor(denominator, numerator%denominator)

但是您的代码似乎表明您还没有完全掌握面向对象的概念。

如果要使用camelCase,您应该让类以大写开头,方法以小写开头。例如
类分数
def greatestcommondivisior
我完全同意,大约两天前我才开始研究面向对象的材料,所以这是我自己尝试的第一段oop代码。我还需要一段时间才能真正学习面向对象编程。我想在那之前学习一下这些概念。所以任何建议都会很有帮助,谢谢。
return self.GreatestCommonDivisor(denominator, numerator%denominator)