finalWords没有定义,我该如何避免?

时间:2017-06-26 20:17:04

标签: python python-3.x

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,我该如何避免这种情况?我是新手使用课程。感谢。

3 个答案:

答案 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)

制作wordsfinalWords个实例属性。像这样:

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")