Python 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列表,然后将其丢弃。不要使用列表来理解它的副作用。如果顺序不重要(因为集合只能包含特定项一次)

当我调用game.getWords时,我得到一个错误,说finalWords没有定义,我如何避免这种情况?我不熟悉使用类。谢谢。

您在
\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
是一个实例属性,它属于class
Game
的实例,而不是类本身。在不同的实例中,
.words
的值不同。类属性定义在
Class
,通常是各种常量。从技术上讲,方法也是类属性。s/class/instance/please。否则您的答案是正确的。@9000您能解释一下,您所说的s/class/instance/?是什么意思吗?此语法是sed、awk等使用的“替换文本”语法。我想说的是,
self.words
是一个实例属性,它属于class
Game
的实例,而不是类本身。在不同的实例中,
.words
的值不同。类属性在
Class
下定义,通常是各种常量。从技术上讲,方法也是类属性。