J'ai une classe qui ressemble à quelque chose comme ce qui suit:python 3: comment créer deux classes différentes fonctionnant sur les mêmes données?
# Class violates the Single Responsibility Principle
class Baz:
data = [42]
def do_foo_to_data(self):
# call a dozen functions that do complicated stuff to data
def do_bar_to_data(self):
# call other functions that do different stuff to data
Je veux briser en deux classes distinctes, car elle viole la SRP. Les fonctions appelées do_foo_to_data()
sont complètement distinctes de celles appelées par do_bar_to_data()
. Pourtant, ils doivent fonctionner sur le même data
.
Je suis venu avec un tas de solutions, mais ils sont tous moche. Existe-t-il un moyen de le faire proprement, de préférence en Python 3 (bien que 2.7 soit OK aussi)?
Le meilleur de mes "solutions" est ci-dessous:
# I find this hard to read and understand
class Baz:
data = [42]
def create_foo(self):
return Baz.Foo()
def create_bar(self):
return Baz.Bar()
class Foo:
def do_foo_to_data(self):
# call foo functions
class Bar:
def do_bar_to_data(self):
# call bar functions
Note: Il me est pas essentiel pour que le membre soit un membre de la classe data
. Je m'attends seulement à créer une instance de Baz
; mais je ne voulais pas poser deux questions dans un seul article et commencer une discussion sur les singletons.
Sans les exigences réelles, il est trop difficile de commenter. Séparation des préoccupations et SRP ne signifie pas que votre classe ne peut pas avoir plusieurs méthodes. Dans votre "solution", Baz a toujours le même problème que dans l'original. Peut-être que penser au problème en tant que Model-View-Controller aiderait. Avoir une classe qui gère les données (Modèle) et d'autres classes qui effectuent les manipulations/opérations (Contrôleurs). Si nécessaire, vous pouvez lancer une classe pour représenter les résultats (vue). – RobertB