Hejka, jest tu jakiś Pythonowiec?
Posiadam obiekt który odpowiada za pliki projektu. Tzn spina wszystko w całość(backupy, pliki projektu itp.).
Posiada on zasadniczo trzy, interesujące nas w tym momencie zadania(inne nie mają wpływu na zagadnienie):
> Utwórz projekt i zapisz jego pliki w danej lokalizacji
> Wczytaj projekt z określonej lokalizacji
> Zapisz zmiany w projekcie(oddzieliłem ponieważ taka metoda nie wymaga aż tak dużej ilości argumentów, wykonuje dużo mniej operacji, poza tym nie zmienia wartości które wymagane są do podania jako argumenty pierwszej metody)
W teorii wszystko gra, tylko, że:
> Nie można w konstruktorze przyjąć określonej listy argumentów i wykonać tworzenia bądź wczytywania projektu ponieważ nie wiadomo jeszcze co programista zamierza zrobić - utworzyć nowy, czy wczytać istniejący projekt(a więc wiele wartości które przy tworzeniu są wymagane jako argumenty pobrać z plików projektu).
> Jeśli konstruktor nie będzie przyjmował żadnych argumentów(wydawało by się to najlepsze rozwiązanie) to można by zrobić potem object.load bądź object.create, ale wtedy gdyby ktoś skorzystał z object.save_changes zanim wczytałby pliki projektu lub utworzył projekt, mogłoby dojść do błędu ponieważ wiele potrzebnych zmiennych nie byłoby utworzonych. Można by wtedy rzucić wyjątkiem, ale nie jestem pewien czy to nie byłoby sprzeczne z normami które stosujemy w Pythonie. Nie powinno być chyba tak, że jedna metoda wyrzuca wyjątek i odmawia współpracy, jeśli wcześniej nie wywołamy innej.
> Myślałem o przeładowaniu w konstruktorze tak, aby tworzona instancja obiektu mogła(w zależności od podanych argumentów) być jednocześnie tworzeniem projektu bądź jego wczytywaniem. Natomiast mam wrażenie - być może nie prawdziwe - że w Pythonie unika się stosowania przeładowań(w przeciwieństwie do Javy czy C#), a już szczególnie w konstruktorze. Nie wiem też, czy takie coś byłoby odpowiednio intuicyjne dla programisty. Mam wrażenie, że lepiej byłoby robić instance = object() i potem object.load(argumenty metody) bądź object.create(argumenty metody). Natomiast nie wiem jak to wszystko zrobić tak, aby to było zgodnie ze sztuką.