from typing import ClassVar

class Pippo:
    conto:ClassVar[int] = 0
    def __init__ (self, a: int) -> None:
        self.a=a #definendo e assegnando un campo di istanza
        Pippo.conto += 1
    
    def __repr__(self) -> str:
        return f"REPR (Pippo: a={self.a}) Pippo.conto={Pippo.conto}"
    
    def __str__(self) -> str:
        return f"STR (Pippo: a={self.a}) Pippo.conto={Pippo.conto}"
    
    def incrementa (self, incremento:int) -> None:
        self.a += incremento
        
    def __eq__(self, value:object) -> bool:
        if not isinstance(value,Pippo): return False
        return self.a==value.a
    
    @classmethod
    def leggi_conto (cls):
        return cls.conto
    
    @staticmethod
    def esempio_statico (i:int, j:int) -> int:
        return i+j

p = Pippo (3) #richiama il costruttore passando 3 come parametro
#print (f"p.a={p.a}")
print (p)

p2 = Pippo (10)
print (p2)

print (p)
p.incrementa(20)
print (p)

print (Pippo.leggi_conto())
print (Pippo.esempio_statico(10,45))

a = "4000000000"
print (isinstance(a, int))
print (isinstance(a, str))

b = "4000000000"
print (a is b)

p3 = Pippo(10)
print (p2 is p3)
print (p2 == p3)

