Domanda sulla OOP

in verità, i motivi sarebbero nella spiegazione che cerco, è quello che sto cercando di dire da inizio post.
quali differenze ci possono essere per ottenere lo stesso risultato da utilizzare o meno le istanze?

un esempio avendo scaricato dal forum alcuni dei tuoi codici che hai messo a disposizione, in
uno di questi c5-editcolor3.py (18,4 KB) ci sono delle def al di fuori della classe, come mai
hai fatto in quel modo? non si poteva comunque inserirle nella classe e richiamarle ugualmente?

giusto per farne un’altro di poco tempo fa:

import Rhino
import System.Drawing
import scriptcontext as sc

class GetLines(Rhino.Input.Custom.GetPoint):
    def OnDynamicDraw(self, args):
        args.Display.DrawLine(Rhino.Geometry.Point3d(10,0,0), args.CurrentPoint, System.Drawing.Color.Green, 2)

gp = GetLines()
gp.Get()

nell’altro post dove riportavo il codice sopra, chiesi se era possibile usare questo codice senza la classe

da come specificato Emilio, avevi sottolineato che in quel caso non era possibile, quindi
mi domando in quale situazione si potrebbe fare a meno di usare la classe e istanze?

In quello script ho usato una classe per necessita’.
Per costruire l’interfaccia grafica devo derivare una classe da System.Windows.Forms.Form.
Quella libreria funziona cosi’.

Ma personalmente negli script di solito non definisco delle classi.
Mi trovo bene cosi’. Sono solo preferenze personali.

Credo di si’.
Ma non avevo nessun motivo per farlo, dato che Python mi permette di usare delle funzioni in stile procedurale, ho fatto in quel modo.

Se parli di classi definite nello script, come ho accennato, di solito le uso solo se necessario.
I due casi che hai riportato (interfaccia grafica dello script e grafica custom in fase di selezione) sono appunto due casi in cui e’ necessario definire una classe.
Ma nella grande maggioranza dei miei script non e’ definita nessuna classe, ad esempio.

Parli anche di istanze.
Nei post precedenti, se ho capito bene, parlavi di istanze di classi RhinoCommon.
Sono cose diverse.

Una cosa e’ definirsi le proprie classi negli script, e ognuno fa come preferisce, salvo i casi di necessita’ come visto sopra.

Un’altra cosa e’ usare istanze di RhinoCommon, e se nel tuo script utilizzi RhinoCommon allora utilizzerai anche delle istanze di quelle classi. E’ quello lo scopo per cui si importa RhinoCommon.

Io quello che sto cercando di capire dall’inizio del post, e ho gia’ chiesto piu’ volte, e’ proprio se stai parlando di definire nuove classi nello script o se stai parlando di utilizzare gli oggetti (istanze) di RhinoCommon.

Sono due cose totalmente separate.
Se non le teniamo separate non andiamo da nessuna parte. :smile:

La prima, ripetiamo, salvo i casi in cui sia necessario, e’ a tua discrezione.
Decidi tu come impostare lo script: con una o piu’ classi o usando semplicemente valori singoli, liste, dizionari, insomma quello che Python mette a disposizione senza usare classi.

La seconda, come abbiamo gia’ detto in post precedenti, secondo me e’ una domanda che ha poco senso.
Se usi RhinoCommon lo fai proprio per poter utilizzare i suoi oggetti.
A quello servono le librerie. Le importi per usarle.
Se non vuoi utilizzare le classi di RhinoCommon, cosa la importi a fare ? :wink:

Scherzi a parte …
Quando tu importi rhinoscriptsyntax lo fai appunto per poter usare le sue funzioni, per cui scriverai ad esempio rs.UnselectAllObjects() per deselezionare tutto.
E’ lo stesso per RhinoCommon, la importi per poter scrivere, ad esempio
go = Rhino.Input.Custom.GetObject() quando devi ottenere l’input di un oggetto.
( poi certo scriverai anche altre istruzioni, per esempio utilizzando metodi e proprieta’ per portare a termine l’operazione di input ).

Se vuoi continuare questa discussione in modo proficuo, per quanto mi riguarda, per favore, tieni separati i due casi di cui abbiamo detto.

  1. nuove classi definite nello script
  2. utilizzo di RhinoCommon e suoi oggetti nello script

Grazie. :grinning: