Rozumiem różnicę między copya deepcopyw module kopiowania. Używałem copy.copyi copy.deepcopywcześniej z powodzeniem, ale to jest pierwszy raz, kiedy faktycznie przeładowałem metody __copy__i __deepcopy__. Już Googled się i spojrzał przez wbudowany w modułach Pythona szukać wystąpień __copy__i __deepcopy__funkcji (np sets.py, decimal.pyi fractions.py), ale nadal nie jestem w 100% pewien, że mam rację.
Oto mój scenariusz:
Mam obiekt konfiguracyjny. Początkowo zamierzam utworzyć wystąpienie jednego obiektu konfiguracyjnego z domyślnym zestawem wartości. Ta konfiguracja zostanie przekazana do wielu innych obiektów (aby zapewnić, że wszystkie obiekty będą miały taką samą konfigurację). Jednak po rozpoczęciu interakcji z użytkownikiem każdy obiekt musi niezależnie dostosować swoje konfiguracje, nie wpływając na wzajemne konfiguracje (co mówi mi, że będę musiał wykonać głębokie kopie mojej początkowej konfiguracji).
Oto przykładowy obiekt:
class ChartConfig(object):
def __init__(self):
#Drawing properties (Booleans/strings)
self.antialiased = None
self.plot_style = None
self.plot_title = None
self.autoscale = None
#X axis properties (strings/ints)
self.xaxis_title = None
self.xaxis_tick_rotation = None
self.xaxis_tick_align = None
#Y axis properties (strings/ints)
self.yaxis_title = None
self.yaxis_tick_rotation = None
self.yaxis_tick_align = None
#A list of non-primitive objects
self.trace_configs = []
def __copy__(self):
pass
def __deepcopy__(self, memo):
pass
Jaki jest właściwy sposób wdrożenia metod copyi deepcopyna tym obiekcie, aby zapewnić copy.copyi copy.deepcopyzapewnić mi właściwe zachowanie?