Zbiór wartości wszystkich atrybutów tworzy stan konkretnego obiektu, który przechowywany jest w pamięci lub innym nośniku danych pod określonym adresem, dzięki czemu możliwy jest dostęp do niego za pośrednictwem referencji.
W większości języków programowania struktura pamięci wykorzystywanej do przechowywania stanu obiektu jest ustalana w momencie kompilacji programu na podstawie definicji klasy oraz właściwości architektury sprzętowej. Alternatywnym podejściem jest model języka Python, w którym wartości atrybutów obiektu są zapisane jako tablica asocjacyjna par (klucz, wartość). Dzięki temu poszczególne obiekty tej samej klasy mogą różnić się ilością i znaczeniem atrybutów, które mogą być do nich dynamicznie dodawane.
Klasy definiują również zbiór niezmienników, które są zachowywane przez wszystkie metody klasy. Niezmiennik jest pewnym wyrażeniem odnoszącym się do atrybutu, które musi być zawsze spełnione aby stan obiektu był prawidłowy, niezależnie od tego, jakie operacje na nim wykonamy. Jeśli przy pomocy obiektów reprezentujemy różne samochody, możemy zdefiniować niezmiennik definiujący minimalny promień skrętu. Programista nie może utworzyć obiektu samochodu, którego wartość promienia skrętu będzie mniejsza niż minimalna, a gwarantuje nam to obecność niezmiennika.