[Python] python e classi

Manlio Perillo manlio.perillo a gmail.com
Ven 12 Ago 2016 21:02:34 CEST


2016-08-12 20:32 GMT+02:00 Giuliano Curti <giulianc51 a gmail.com>:
> On 8/12/16, Manlio Perillo <manlio.perillo a gmail.com> wrote:
>
> ciao Manlio,
>
>> 2016-08-11 23:17 GMT+02:00 Giuliano Curti <giulianc51 a gmail.com>:
>>> ...
>>
>> .......
>>
>> In questo caso la cosa più semplice da fare mi sembra:
>>
>> class Graph:
>>     def X(self):
>>         g = build_digraph(self)
>>
>>         return g.Y()
>
> perfetto, hai centrato il problema;
>
>
>> Su come implementare build_digraph si potrebbe aprire probabilmente un
>> thread separato, dato che immagino tocca parti private
>> dell'implementazione di Graph e magari anche DiGraph.
>
> io immaginavo appunto una funzione toDigraph() (guarda che
> immaginazione :-) nella quale chiamavo la classe Digraph() per creare
> un quasi clone del mio grafo originario, eseguire le calcolazioni e
> poi buttare tutto conservando il solo risultato;
>

Che intendi con chiamare la classe Digraph?
Comunque creare un clone non basta; non devi anche aggiungere le
informazioni sull'orientamento?

> il dubbio che mi veniva era che questo metodo toDigraph() chiamava la
> classe Digraph() che era a sua volta costruita sulla classe Graph()
> che è quella chiamante, una specie di mostro semantico (almeno per me
> a digiuno di classi): ovviamente posso provare, se gira bene
> altrimenti adotto un'altra strada;
>

Secondo me ti fai troppi problemi :).

Io sceglierei tra due soluzioni:

1) Dato che build_digraph "conosce" [1] la rappresentazione interna
    di Graph e DiGraph, può semplicemente creare un oggetto DiGraph
    partendo di vertici del grafo originale e aggiungendo i dati per
    l'orientamento. Se il metodo Y non modifica il grafo non hai nemmeno
    bisogno di clonare il grafo di partenza (assumo tu sappia cosa si
intenda per
    clonare, in Python)

2) Aggiungere un metodo statico alla classe DiGraph, from_simple_graph,
    che accetta una instanza di Graph ed i dati per l'orientamento, e
    restituisce un nuovo DiGraph.
    Questa sembra la soluzione "alla moda"; a me non piace e cerco di evitare
    metodi statici.


[1] In realtà in Python tutti conoscono e possono accedere alla
rapresentazione interna di una classe,
     ma solo il codice nello stesso package dovrebbe accederci.


Ciao  Manlio


Maggiori informazioni sulla lista Python