我正在尝试在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。
考虑您具有在全局范围内定义的功能:
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
尽管即使您不使用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中工作的知识!
问题内容: 我在自学Python,只是在“探索”。Google说datetime是一个全局变量,但是当我尝试在终端中查找今天的日期时,我在问题标题中收到NameError吗? 问题答案: 您需要先导入模块: 之后,它可以工作:
问题内容: 我有以下代码,并在尝试运行它时收到以下错误消息: 我试图让Raspberry Pi在端口17上收到输入时运行HTML脚本: 问题答案: Python的布尔常量是大写的:与以大写字母和分别。 小写变体只是变量的有效免费名称,因此您可以将它们用于任何所需的变量,例如(不建议使用; P)。
我试图做一个基于链接列表和节点的N-Ary树。但是每当我试图给树添加一个新值时,我总是得到: NameError:未定义名称“self” 我使用模块,所以我必须从其他文件导入类。 我在树代码的def addTree(self,value,parent=self.root)中遇到了这个错误 树代码 节点代码 链接列表代码 也谢谢你的帮助,我对Python有点陌生,我不知道我做错了什么。
大家好,我刚刚遇到了这个问题,我正在学习教程,我试图在我的文章和类别之间创建多对多关联,所以我通过键入以下内容添加了article\u类别模型: 在这个模型里面我输入了 内部文章。rb: 和内部类别。rb: 所以我去了控制台:通过输入以下内容进行关联: 我检查了文章。类别 我也试了分类 结果是: 所以我试图通过输入以下内容使这篇文章成为此类文章的一部分: 所以我得到了这个错误: 这是错误,伙计们,
我正在尝试将添加到 Devise,但是当我注册一个新用户时,当我推送提交时它会中断。 我已确保运行< code>rake db:migrate并重新启动了我的服务器,但我得到了以下错误: ActiveRecord::StatementInvalid in Devise::RegistrationsController#create NoMethodError: nil:NilClass 的未定义方
我很难弄清楚为什么会出现错误:nameerror:name“convert tobinarydata”没有定义,有什么想法吗? 我认为函数convertToBinaryData的声明是正确的,尽管我不确定如何修复这个问题 回溯(最近一次调用):文件“C:\users\user............\testdb.py”,第20行,db.insertRawEcg(1,2,“C:\users\use