Python Класс с множеством аргументов - PullRequest
0 голосов
/ 27 апреля 2020

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

Но класс получит множество аргументов, в настоящее время около 15. Является ли класс действительно правильным подходом тогда?

class Voc_Entry:
def __init__(self, id_n, german, kanji_writing, kana_writing, word_type =  None, date_added = datatime.today(), kanji_write_progress = None, kanji_read_progress = None, kana_read_progress = None, kana_write_progress = None, kanji_write_last_date = None, kanji_read_last_date = None, kana_read_last_date = None, kana_write_last_date = None, kanji_write_next_date = None, kanji_read_next_date = None, kana_read_next_date = None, kana_write_next_date = None):
    self.id_n = id_n
    self.german = german
    self.kanji_writing = kanji_writing
    self.kana_writing = kana_writing
    self.word_type = word_type
    self.datetime = date_added
    .........

Или я должен разделить это на функции в классе, чтобы потом получить даты? Спасибо за ваш совет Styx1337

1 Ответ

3 голосов
/ 27 апреля 2020

Мой совет - найти способы сгруппировать аргументы в логические единицы. Просмотр большего количества контекста облегчит внесение конкретных предложений, но группировки kana... и kanji... предполагают, что, возможно, должен быть какой-то класс для представления отслеживания прогресса?

from datetime import datetime
from typing import NamedTuple, Optional


class ProgressEntry(NamedTuple):
    read_progress: float
    write_progress: float
    read_last_date: datetime
    write_last_date: datetime
    read_next_date: datetime
    write_next_date: datetime


class VocabEntry:
    def __init__(
        self, 
        id_n, 
        german, 
        kanji_writing, 
        kana_writing, 
        word_type =  None, 
        date_added = datetime.today(), 
        kana_progress: Optional[ProgressEntry] = None,
        kanji_progress: Optional[ProgressEntry] = None, 
    ):
        self.id_n = id_n
        self.german = german
        self.kanji_writing = kanji_writing
        self.kana_writing = kana_writing
        self.word_type = word_type
        self.datetime = date_added
        ...
...