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")
当我调用game.getWords时,我收到一条错误,指出没有定义finalWords,我该如何避免这种情况?我是新手使用课程。感谢。
答案 0 :(得分:1)
您在finalWords
中定义__init__
,然后__init__
结束,并且该局部变量消失。您可能希望将其作为实例的属性存储,方法是始终使用self.finalWords
。
顺便说一句,您在getWords
中使用列表解析会创建一个None
列表,然后您将其丢弃。不要使用列表理解来解决其副作用。如果订单不重要,则应使用常规for
循环或set
循环(因为set
只能包含特定项目一次)。
答案 1 :(得分:1)
您的finalWords
是构造函数中的局部变量,而不是实例字段。
与Java或C#不同,您必须始终使用实际实例限定实例字段,实际实例中的方法通常名为self
。
这将有效:
def __init__(self):
self.words = []
self.finalWords = []
def getWords(self, url):
# your code....
self.finalWords.append(...)
print self.finalWords
答案 2 :(得分:1)
制作words
和finalWords
个实例属性。像这样:
import random
import requests
from bs4 import BeautifulSoup
import random
import time
class Game(object):
def __init__(self):
self.words = []
self.finalWords = []
def getWords(self,url):
sourceCode = requests.get(url).text
soup = BeautifulSoup(sourceCode, 'html.parser')
self.words = soup.get_text().lower().split()
[self.finalWords.append(item) for item in self.words if item not in self.finalWords]
print(self.finalWords)
game = Game()
game.getWords("http://members.optusnet.com.au/charles57/Creative/Techniques/random_words.htm")