OT Python3

la prova che intendevi era questa :

print(type(Class1().a))
<class ‘int’>

print(type(x.a))
<class ‘int’>

print(type(Class2().b))
<class ‘int’>

print(type(y.b))
<class ‘int’>

in questo caso sono tutti uguali.

Scusa, hai verificato che quei valori sono tutti numeri interi.
A cosa ti serve ?
Vuol dire che tu hai scritto , ad esempio

x.a = 10

Se scrivevi

x.a = 10.10

ti dava float invece che int

Stiamo parlando di classi e attributi o di tipi di dati ?

Quello che intendevo era questo

class cane:
  zampe = 4
  def conta( self ):
    print( self.zampe )

bobi = cane()
bobi.conta()
# incidente stradale
bobi.zampe = 3
bobi.conta()
print( cane.zampe )

Cioe’ del fatto che gli attributi
cane.zampe
e
bobi.zampe
sono due cose diverse qui

certo fino a qui ci si era arrivati :ok_hand:

Edit:
appunto dico esseno che si può istanziare la classe anche senza il costruttore init
diciamo che alla fine scegliere di usare init o meno e solo una preferenza personale

ma la differenza che io mi riferivo non era nel cambiare il valore nella classe o istanza ma usare init o meno

sto facendo delle prove ed a primo impatto se sono nella giusta strada posso cambiare il valore tramite classe o tramite istanza ma usando il costruttore init ogni volta “inizializza” i valori come impostati all’interno

OK. per quanto riguarda la istanze, anche a me sembra che sia lo stesso.
Credevo che parlassi della differenza tra attributo di classe e attributo di istanza.

Cosa intendi ? Di quale valore parli ?

lo stesso esempio che hai fatto prima:
puoi cambiare o solo il valore dell’istanza
oppure cambiare direttamente il valore nella classe

quello che sto provando con il metodo init dopo aver chiamato la classe se poi cambio il valore e richiamo la classe il metodo init ripristina comunque i valori impostati all’interno per lo meno questo sto notando.

Non riesco a capire … ma fa lo stesso… :slight_smile:

Buona sperimentazione !

Eureka !

e anche questa volta avevi ragione tu :+1:

AH, OK … se lo dici tu (io ormai mi sono perso) … :rofl:

ormai Emilio non sappiamo nemmeno più chi siamo ahahahah

ps giusto per romperti ancora le scatoline di sabato pomeriggio :yum:

ma è sbagliato dire qualora si usasse - in una classe - una definizione “usando la parola chiave self” -
che la parola chiave self richiamata dalla definizione è anch’essa un’istanza?

Non mi sembra sbagilato, di solito usiamo self per indicare un’istanza della classe (possiamo anche chiamarlo oggetto, se vogliamo, anziche’ istanza … )
… Anche se self non e’ una parola-chiave … :wink:

si hai ragione le parole chiavi sono altre in effetti

quindi ricapitolando :
se x=Class1() e Class1 chiama una funzione con self
è un’istanza che chiama un’altra istanza o oggetto come hai detto giusto?

puoi fare un esempio ?

nel senso che se self è un’istanza di classe

quando indico : x=Class1()
e x è anchessa un’istanza

in pratica quando scrivo : x.def1()
x (istanza) richiama la funzione def1 che contiene self (istanza)
è corretto?

se scrivi

x.def1()

il valore di x e’ quello che viene assegnato al parametro self di def1,
cioe’ x e’ il primo parametro (qui anche l’unico) che passi a def1

Credo sia come scrivere

Class1.def1( x )

… ma e’ meglio se fai una prova … :smile:

solo mozzarelle sono rimaste provole finite :smiley:

meglio andare a vedere cosa fare tra poco va, per essere sabato abbiamo già dato tanto :smile:

alla prox Emilio e thank :+1:

Ciao !

class Class2:
    def def2(self):
        print(self.b + 1)

Class2.b = 20
print(Class2.b)

Class2().def2()
print(Class2().b)

il risultato ritorna prima 20 poi 21 infine 20
mah vedendo il risultato di questo esempio secondo me il tutto si riapre

Perche’ ?
Non ti risulta che 20 + 1 faccia 21 ? :wink:

certo che mi risulta che fa 21

questo codice conferma il fatto che la variabile di classe b e self.b sono la stessa identica cosa solo impostate con due modi diversi, che poi si creano 1000 istanza che prelevano il valore associato li ci si era arrivati.

in pratica da quello che ho costatato come già accennato ieri il metodo init riporta i valori iniziali come impostati al suo interno ogni qual volta si richiama la classe cosa che invece non avviene impostando una variabile

(quindi è questa la differenza tra usare l’uno o l’altro metodo)