考虑您具有在全局范围内定义的功能:
def recursive(x): if (x>5): print (x) recursive(x - 1)
recusive(10)如果
staticmethod在类中将其设置为a,则只需从程序中的其他位置以及从函数内部类似地调用:
class Recursion: @staticmethod def recursive(x): if (x>5): print (x) recursive(x - 1) #this isn't how you call it any more
现在它存储在全局范围中,
Recursion.recursive因此这也是您在函数中必须引用它的方式:
class Recursion: @staticmethod def recursive(x): if (x>5): print (x) Recursion.recursive(x - 1)
但是,如果您希望方法直接(在函数本地)访问类范围,则可以将其标记为
classmethod:
class Recursion: @classmethod def recursive(cls,x): #the first argument is the class if (x>5): print (x) cls.recursive(x - 1)
这有几个好处,首先是可以将其称为as
Recursion.recursive(10)或,
x = Recursion() ;x.recursive()但也将在适当时使用子类而不是始终使用
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尽管即使您不使用
staticmethod或
classmethod仍需要引用该方法,也可以将其作为一种方法:(在Java中,您可以按名称使用方法,但是python基本上迫使您使用
self.METHOD与Java类似的方法
this.METHOD)
class Recursion: def recursive(self,x): if (x>5): print (x) self.recursive(x - 1)
希望这能清除有关方法如何在python中工作的知识!



