Devo inserire i parametri nel costruttore o nel metodo? (Python 3)

0

Ho il seguente codice:

def __init__(self, vocable_file_path, xsd_file_path, word_list_file_path):
    self.vocable_file_path = vocable_file_path
    self.xsd_file_path = xsd_file_path
    self.word_list_file_path = word_list_file_path


def add_values_to_attribute_of_vocables (self, attribute_name, attribute_value, words_attribute_name):
    ... (does the job of adding stuff) ...

Solo il metodo add_values_to_attribute_of_vocables utilizza i tre parametri impostati nel costruttore. Potrei trasferirli nella firma del metodo abbastanza facilmente. Ciò che mi impedisce di farlo è che la firma del metodo diventerebbe piuttosto lunga e non sono sicuro che sia una buona pratica farlo.

Ho letto la seguente domanda qui su PSE: Come cambia il concetto di una classe quando si passano dati al costruttore anziché i parametri del metodo?

Mi fa pensare che dovrei inserire i parametri nella firma del metodo, ma non sono ancora sicuro, se è la cosa giusta da fare.

Questo non è un nero & domanda bianca, se c'è qualcosa di fondamentalmente cattivo sul codice o sul mio approccio, per favore dì così, grazie.

Posso pubblicare più codice, se lo si desidera, ma penso che il resto del codice non sia correlato e potrebbe solo confondere questa domanda.

MODIFICA 1:

Ora ho diviso il mio codice in più classi: link

Ora dovrei spostare tutti i parametri nel costruttore della classe XLDAttributeAdder ?

    
posta Zelphir 28.07.2015 - 14:07
fonte

1 risposta

2

È un po 'un odore di codice, e la tua sensazione istintiva è giusta su questo non essere una buona soluzione. Ma invece di passare gli argomenti, estrai il metodo ei tre parametri in una classe separata. Questa classe prende gli argomenti nel costruttore e espone l'unico metodo.

Qualcosa mi dice che questo metodo sta facendo qualcosa che può essere scisso in un'altra classe e che la classe che attualmente ha questo metodo sta violando l'SRP (Single Responsibility Principle) nell'avere quel metodo. Penso che scoprirai che il metodo e la classe estratti si adattano perfettamente a una responsabilità che dovrebbe essere gestita da una singola classe.

    
risposta data 28.07.2015 - 14:19
fonte