程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python3 NameError:未为已定义的@staticmethod定义名称“方法”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python3 NameError:未为已定义的@staticmethod定义名称“方法”?

开发过程中遇到Python3 NameError:未为已定义的@staticmethod定义名称“方法”的问题如何解决?下面主要结合日常开发的经验,给出你关于Python3 NameError:未为已定义的@staticmethod定义名称“方法”的解决方法建议,希望对你解决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)

这有几个好处,首先是可以将其称为asRecursion.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

尽管即使您不使用staticmethodclassmethod仍需要引用该方法,也可以将其作为一种方法:(在Java中,您可以按名称使用方法,但是python基本上迫使您使用self.METHOD与java类似的方法this.METHOD

class Recursion:
    def recursive(self,X):
        if (x>5):
            print (X)
            self.recursive(x - 1)

希望这能清除有关方法如何在python中工作的知识!

解决方法

我正在尝试在python3中编写一个简单的递归函数。在学习OO
Java时,我还想编写涉及对象的Python代码。这是我的下面的代码。我提示用户输入一个数字,屏幕应该显示每个小到5的整数。

class Recursion:
    @staticmethod
    def recursive(X):
        if (x>5):
            print (X)
            recursive(x - 1)

def main(self):
    x = int(input('Enter a number for recursive addition: '))
    recursive(X)

但是,当我在终端上运行它时,它说:“ NameError:未定义名称’recursive’”。错误如下所示:

Python 3.5.1 (v3.5.1:37a07cee5969,Dec  5 2015,21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "Help","copyright","credits" or "license" for more information.
>>> from Recursion import *
>>> a = Recursion()
>>> a.main()
Enter a number for recursive addition: 10
TraceBACk (most recent call last):
  File "<stdin>",line 1,in <module>
  File "/Users/ZycinG/Desktop/Python Practice/Recursion.py",line 9,in main
    recursive(X)
NameError: name 'recursive' is not defined

是什么导致问题出在这里?我知道如何编写递归函数,给它一个参数,然后使其在终端上运行。但是我想练习OOP。

大佬总结

以上是大佬教程为你收集整理的Python3 NameError:未为已定义的@staticmethod定义名称“方法”全部内容,希望文章能够帮你解决Python3 NameError:未为已定义的@staticmethod定义名称“方法”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。