栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python3 NameError:未为已定义的@staticmethod定义名称“方法”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python3 NameError:未为已定义的@staticmethod定义名称“方法”

考虑您具有在全局范围内定义的功能:

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中工作的知识!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号