Python CLI argprse для методов - PullRequest
       17

Python CLI argprse для методов

0 голосов
/ 09 ноября 2018

У меня проблема с созданием argparse для методов: Мой main.py

parser = argparse.ArgumentParser()
parser.add_argument( "--word", "-w", help="Find score for word", type=str)
args = parser.parse_args()

second = SecondOption()
print(args.word)
second.score_from_word(args.word)

класс SecondOption:

class SecondOption():
    def score_from_word(word):
        SCRABBLES_SCORES = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
                (4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
        LETTER_SCORES = {letter: score for score, letters in SCRABBLES_SCORES
             for letter in letters.split()}
        score = 0
        for w in range(word):
            if w in LETTER_SCORES.keys():
                score += LETTER_SCORES.get(w)
        print(score)

После записи в консоли: python main.py -w KOT Я хочу получить оценки (7 для этого примера), но я получаю TypeError: принимает 1 аргумент, но 2 были заданы. Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Проблема в том, что у вашего SecondOption класса есть связанный метод с именем score_from_words с неверной подписью ... или, по крайней мере, не так, как вы ожидаете.

Так как метод привязан к классу. Первый отправленный аргумент будет экземпляром self, всегда для связанных методов (методов в классе). Таким образом, в действительности этот вызов ищет подпись self_from_word(self, word), поэтому два аргумента отправляются, когда вы указали только один.

Исправление заключается в добавлении self в качестве первого параметра к связанному методу.

class SecondOption():
    def score_from_word(self, word):
        pass
0 голосов
/ 09 ноября 2018

При использовании функции / метода внутри класса первым аргументом всегда должен быть self. Поэтому вам нужно перейти с def score_from_word(word): на def score_from_word(self, word):. Также я нашел еще одну ошибку в вашем коде: for w in range(word): должно быть for w in word:, так как вы пытаетесь получить не позицию буквы, а само письмо.

...