Как определить себя в классе python, который уже определил себя? - PullRequest
0 голосов
/ 06 февраля 2020

Я только что вернулся в python и хотел поэкспериментировать с классами, когда я запускаю этот код и хочу добавить слово, появляется эта ошибка.

What would you like to do(add)
Word please(banana)
Traceback (most recent call last):
  File "/Users/gabrieltozman/Documents/word list.py", line 58, in <module>
    choice.addword()
  File "/Users/gabrieltozman/Documents/word list.py", line 20, in addword
    words.append(choice)
NameError: name 'words' is not defined

Это может быть глупым ошибка с моей стороны, но помощь приветствуется. :)

import random
import csv
running=True
count=0
Die=csv.register_dialect('Die',delimiter=',',quotechar='|',quoting=csv.QUOTE_MINIMAL)
class Wordlist:
    words=[]
    def __init__(self,words,count,choice):
        self.words=words
        self.count=count
        self.choice=choice
    def shuffle(words):
        random.shuffle(words)
        return(words)
    def werdcount(words):
        for i in words:
            i=i+1
        return (count)
    def addword(choice):
        words.append(choice)
        return
    def removeword(choice):
        for i in words:
            if self.words[i] == choice:
                self.words.remove(words[i])
            i=i+1
        return
    def importlist(choice):
        with open('/Users/____/Desktop/wordlist.csv','r',newline='')as csvfile:
            reading=csv.reader(csvfile,dialect=Die)
        i=0
        for row in reader:
            self.words.append(row[i])
            i=i+1
        return (words)
    def exportlist(words):
        with open('/Users/____/Desktop/wordlist.csv','r',newline='')as csvfile, open('/Users/____/Desktop/wordlist.csv','w',newline='')as csvfile2:
            reading=csv.reader(csvfile,Die)
            writing=csv.writer(csvfile2,Die)
        i=0
        x=0
        for row in reading:
            i=i+1
        for row in row[i]:
            writing.writerows(self.words[x])
            x=x+1
            i=i+1
        return

while running:
    action=input("What would you like to do")
    if action == "STOP":
        running=False
    if action == "shuffle":
        words=shuffle(words)
    if action == "add":
        choice=Wordlist(None,None,(input("Word please")))
        choice.addword()
        print(words)
    if action == "export":
        words.exportlist()

Этот код неполон, но я сейчас только отлаживаю его, и я пытался многое исправить, но ни один из они, казалось, исправили это. Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 06 февраля 2020

При написании метода класса важно всегда включать self в качестве параметра, чтобы Python знал, о ком вы говорите.

def shuffle(self, words):
    random.shuffle(words)
    return(words)

Это позволяет вам создавать WordList и call shuffle:

w = WordList(...)
w.shuffle(...)

Однако это действительно просто syntacti c sugar, поскольку он действительно делает:

w = WordList(...)
WordList.shuffle(w, ...)
...