consider you have the function defined in the global scope:
def recursive(x):
if (x>5):
print (x)
recursive(x - 1)
you would simply call this with recusive(10)
from elsewhere in the program and similarly from within the function, if you make it a staticmethod
within a class:
class Recursion:
@staticmethod
def recursive(x):
if (x>5):
print (x)
recursive(x - 1) #this isn't how you call it any more
now it is stored in the global scope as Recursion.recursive
so that is also how you would have to refer to it within the function:
class Recursion:
@staticmethod
def recursive(x):
if (x>5):
print (x)
Recursion.recursive(x - 1)
However if you want a method to have access to the class scope directly (locally to the function) you can label it a classmethod
:
class Recursion:
@classmethod
def recursive(cls,x): #the first argument is the class
if (x>5):
print (x)
cls.recursive(x - 1)
this has several benefits, first that it can be called as Recursion.recursive(10)
or x = Recursion() ; x.recursive()
but also that it will use a subclass if appropriate instead of always using Recursion
:
class Recursion:
def __init__(self,x=None):
raise NotImplementedError("not intended to initialize the super class")
@classmethod
def recursive(x):
if (x>5):
print (x)
cls.recursive(x - 1)
else:
return cls(x)
class R_sub(Recursion):
def __init__(self,x):
self._val = x
#now using R_sub.recursive(10) will work fine
although even if you do not use staticmethod
or classmethod
you still need to refer to the method, as a method: (in java you can use the methods just by name but python basically forces you to use methods as self.METHOD
similarly to java's this.METHOD
)
class Recursion:
def recursive(self,x):
if (x>5):
print (x)
self.recursive(x - 1)
Hope this clears things up about how methods work in python!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…