Python finalWords没有定义,如何避免?
当我调用game.getWords时,我得到一个错误,说finalWords没有定义,我如何避免这种情况?我不熟悉使用类。谢谢。您在Python finalWords没有定义,如何避免?,python,python-3.x,Python,Python 3.x,当我调用game.getWords时,我得到一个错误,说finalWords没有定义,我如何避免这种情况?我不熟悉使用类。谢谢。您在\uuuuu init\uuuuu中定义了finalWords,但是\uuuuuu init\uuuuu结束,并且该局部变量消失。您可能希望通过在整个过程中使用self.finalWords将其存储为实例的属性 顺便说一句,在getWords中使用列表理解会创建一个None列表,然后将其丢弃。不要使用列表来理解它的副作用。如果顺序不重要(因为集合只能包含特定项一次)
\uuuuu init\uuuuu
中定义了finalWords
,但是\uuuuuu init\uuuuu
结束,并且该局部变量消失。您可能希望通过在整个过程中使用self.finalWords
将其存储为实例的属性
顺便说一句,在
getWords
中使用列表理解会创建一个None
列表,然后将其丢弃。不要使用列表来理解它的副作用。如果顺序不重要(因为集合
只能包含特定项一次),则应使用常规的for
循环,或者使用集合
。在中定义finalWords
,但随后集合
结束,并且该局部变量消失。您可能希望通过在整个过程中使用self.finalWords
将其存储为实例的属性
顺便说一句,在getWords
中使用列表理解会创建一个None
列表,然后将其丢弃。不要使用列表来理解它的副作用。您应该使用常规的for
循环,或者如果顺序不重要(因为集合
只能包含一次特定项),则应使用集合。您的finalWords
是构造函数中的局部变量,而不是实例字段
与Java或C#不同,您必须始终使用实际实例限定实例字段,在方法中,实际实例通常命名为self
这将有助于:
import random
import requests
from bs4 import BeautifulSoup
import random
import time
class Game(object):
def __init__(self):
words = []
finalWords = []
def getWords(self,url):
sourceCode = requests.get(url).text
soup = BeautifulSoup(sourceCode, 'html.parser')
words = soup.get_text().lower().split()
[finalWords.append(item) for item in words if item not in finalWords]
print(finalWords)
game = Game()
game.getWords("http://members.optusnet.com.au/charles57/Creative/Techniques/random_words.htm")
您的finalWords
是构造函数中的局部变量,而不是实例字段
与Java或C#不同,您必须始终使用实际实例限定实例字段,在方法中,实际实例通常命名为self
这将有助于:
import random
import requests
from bs4 import BeautifulSoup
import random
import time
class Game(object):
def __init__(self):
words = []
finalWords = []
def getWords(self,url):
sourceCode = requests.get(url).text
soup = BeautifulSoup(sourceCode, 'html.parser')
words = soup.get_text().lower().split()
[finalWords.append(item) for item in words if item not in finalWords]
print(finalWords)
game = Game()
game.getWords("http://members.optusnet.com.au/charles57/Creative/Techniques/random_words.htm")
生成words
和finalWords
实例属性。像这样:
def __init__(self):
self.words = []
self.finalWords = []
def getWords(self, url):
# your code....
self.finalWords.append(...)
print self.finalWords
生成words
和finalWords
实例属性。像这样:
def __init__(self):
self.words = []
self.finalWords = []
def getWords(self, url):
# your code....
self.finalWords.append(...)
print self.finalWords
运行getWords时,finalWords不再在init函数的作用域中。您可能还希望查看list extend()和filter()方法,而不是使用列表理解来附加缺少的项。从站点,“上次更新于1997年6月3日”
。因此,当您运行getWords时,finalWords不再在init函数的作用域中。您可能还希望查看list extend()和filter()方法,而不是使用列表理解来附加缺少的项。从站点,“上次更新于1997年6月3日”
。所以请用s/class/instance/please。否则您的答案是正确的。@9000您能解释一下,您所说的s/class/instance/?是什么意思吗?此语法是sed、awk等使用的“替换文本”语法。我想说的是,self.words
是一个实例属性,它属于classGame
的实例,而不是类本身。在不同的实例中,.words
的值不同。类属性定义在Class
,通常是各种常量。从技术上讲,方法也是类属性。s/class/instance/please。否则您的答案是正确的。@9000您能解释一下,您所说的s/class/instance/?是什么意思吗?此语法是sed、awk等使用的“替换文本”语法。我想说的是,self.words
是一个实例属性,它属于classGame
的实例,而不是类本身。在不同的实例中,.words
的值不同。类属性在Class
下定义,通常是各种常量。从技术上讲,方法也是类属性。