Les variables de classe poden tenir també variables d’instància.
Les variables de classe es distingueixen per tenir@@ abans del nom.
Característiques:
1. Poden ser usades des de mètodes de la classe o des de mètodes de l’objecte.
class Video
  @@type = "video/mp4"
  def self.type_desde_clase
    p @@type
  end
  def type_desde_objeto
    p @@type
  end
end
Video.type_desde_clase
Video.new.type_desde_objeto
Output
"video/mp4"
"video/mp4"
Si convertirem les variables en instàncies, amb una @ veiem els resultats:
class Video
  @type = "video/mp4"
  def self.type_desde_clase
    p @type
  end
  def type_desde_objeto
    p @type
  end
end
Video.type_desde_clase
Video.new.type_desde_objeto
Output
"video/mp4"
nil
En el primer cas la impressió és exactament la mateixa, però en el segon cas. En el primer cas no n’hi ha diferència entre la instància d’objecte i la de classe.
En el segon cas ha retornat nil. La raó és que la variable @type s’està cercant com una variable de l’objecte creat i no com una variable de la classe. Això no passa quan utilitzem les dos arrobes com una variable de classe.
Les variable de classe amb @@ sempre en buscaran en la classe, no importa des d’on es criden.
2. Comportament quan hi ha herència
class Video
  @@de_clase = "Classe woo"
  @de_instancia = "Instancia yeeei"
end
class YouTube < Video
  def self.test
    p @@de_clase
    p @de_instancia
  end
end
YouTube.test
Output
"Classe woo"
nil
La variable de classe @@de_clase s’ha heretat, mentre que la variable d’instància @de_instancia soles li pertany a la classe Video.
Si incloem el mètode en la classe Video:
class Video
  @@de_clase = "Classe woo"
  @de_instancia = "Instancia yeeei"
  def self.test
    p @@de_clase
    p @de_instancia
  end
end
class YouTube < Video
  def self.test
    p @@de_clase
    p @de_instancia
  end
end
Video.test
YouTube.test
Així el Video sí té accés tant a la variable d’instància com de classe, metre que la classe filla sols hereta les variables de classe.
Si canviem una classe padre es veurà reflectit en una classe filla.
class Video
  @@de_clase = "Classe woo"
  @de_instancia = "Instancia yeeei"
  def self.test
    p @@de_clase
    p @de_instancia
  end
end
class YouTube < Video
  def self.test
    @@de_clase = "Clase cambiada :)"
    p @@de_clase
    p @de_instancia
  end
end
YouTube.test
Video.test
Output
"Clase cambiada :)"
nil
"Clase cambiada :)"
"Instancia yeeei"
Les variables de classe quarden la mateixa referència tant en el pare com en el fill, on es modifiquen es van a reflectir en totes les classes.
3. Quan fer servir variables de classe?
Quan es volen magatzemar quan s’utilitzen variables que pertanyen a la classe i no a l’objecte.
Un exemple típic és utilitzar una classe amb figures.
Cal utilitzar variables d’instància quan no convé que aquestes variables se hereten a les classe filles.