I have the following class. I have tried many basic examples but I always get the same error.

class Factorial(object):
    def calculate(self, n):
        if n == 0:
            return 0
        elif n == 1:
            return 1
        else:
            return n * calculate(self, n - 1)
        
if __name__ == "__main__":
    fact = Factorial()
    print fact.calculate(5)

When I run the code, it gives me the following error

line 8, in calculate
NameError: global name 'calculate' is not defined

. It seems that the recursive call cannot be executed because the function is somehow undefined. Every time I have to incorporate recursion in class' methods, I get this error. Am I missing a piece of code? Your help is greatly appreciated.