Estou trabalhando em um projeto de geração de bancos de dados . No contexto desse projeto, fiquei com dúvidas sobre quando definir um método como @classmethod ou @staticmethod. Um fragmento do código :
import random
import csv
class Data_Gen:
def __init__(self, data_input=None, data_output=None, len_row=None):
self.data_input = data_input
self.data_output = data_output
self.len_row = len_row
#@Static ou classmethod ?
def random_distribution(self, N=None, key_map=None, output_file=None):
if N is None:
N = self.len_row
if output_file is None:
output_file = self.data_output
lines = [[] for _ in range(N)]
keys = list(key_map.keys())
random.shuffle(keys)
for i, key in enumerate(keys):
lines[i % N].append((key, key_map[key]))
with open(output_file, 'w', newline='') as csv_output:
writer = csv.writer(csv_output)
writer.writerows(lines)
Além disso, não entendi exatamente a relação de entrada, saída e modificação de atributos relacionados com métodos. A dúvida surgiu pois por questões de limpeza, decidi utilizar os atributos da classe nos parâmetros dos métodos. Surge então uma dúvida: Devo de fato utilizar os atributos ou compensa mais criar variáveis isoladas para não mexer diretamente nos atributos da classe ? Na verdade, a utilização de classe é realmente necessária nesse código ?
Grato dês e já. Gabriel.