【发布时间】:2016-03-14 17:21:49
【问题描述】:
我正在学习课程,我编写了一个简单的程序来更好地理解它们。该程序基本上是一个打开文件的类。但是,我不断得到:
NameError:未定义全局名称“book”
我认为在__init__ 方法中初始化self.book = book 将使我能够将其传递给下一个方法。但这行不通。如何将self.book 传递给open_file 方法?
class AnalyzeBook(object):
def __init__(self, filename, book):
self.filename = filename
self.book = book
def open_file(self, filename, book):
with open(self.filename) as f:
self.book = f.readlines()
return self.book
book_analysis = AnalyzeBook('lordoftherings.txt', book=None)
book_analysis.open_file('lordoftherings.txt', book=None)
编辑: 更新了我的代码,将 book 添加到 __init__ 和 book=None 并且有效。
【问题讨论】:
-
那么
self.book应该设置为到。你只给了这个类一个文件名。 -
另外,从编辑器复制并粘贴您的代码,不要重新输入。最后一行上的那些花哨的引号通常会导致语法错误,因此某些“智能”文本自动改进会在您键入时插入那些。
-
你也可以在 init 中做 self.book = None
-
这取决于。每个实例是否以
self.book的不同值开头?如果没有,您可以硬编码该值:self.book = 'tree',而不是将其作为__init__函数的参数。