Obiekt jako konstrukcja teoretyczna jest bardzo prosty: jest to struktura przechowująca dane, funkcje lub oba. Chodzi o to, że struktury te mają poczucie „jaźni”, które jest ukryte w większości języków poza Pythonem. Nazywa się to „deskryptorem” i daje obiektowi punkt odniesienia, który wiąże dane (zmienne lub pola) i funkcje (zwykle nazywane metodami) z danym obiektem. Chodzi o to, że konkretnie używasz zmiennej lub metody, która należy do tej konkretnej instancji (przydzielony blok pamięci zwykle poniżej), a nie do jakiejś większej, bardziej ogólnej konstrukcji.
Systemy obiektowe różnią się w zależności od dwóch dużych kategorii: dziedziczenia i dostępu.
Niektóre, takie jak Java lub C ++, zadeklarowały klasy, które działają jak „plany” dla obiektów, które następnie zostają przydzielone. Po utworzeniu instancji tych klas i ich obiektów nie można modyfikować strukturalnie. Ich treść może zostać przesłonięta w tym sensie, że zmienne mogą się zmieniać, ale ich struktura jest statyczna. Nie można na przykład dodawać nowych metod do HashMap w Javie. Możesz rozszerzyć interfejs (w zasadzie częściowo zaimplementowane klasy służące jako kontrakty) lub utworzyć podklasę, aby uzyskać dodatkowe potrzebne metody lub zmienne wraz ze wszystkimi oryginalnymi zmiennymi i metodami danej klasy.
Inne języki oparte na klasach, najczęściej cytowanym językiem jest Ruby, pozwalają łatwo otworzyć istniejącą klasę i po prostu dodawać metody według własnego uznania. To kość niezgody i przez wielu uważana za bardzo, bardzo niebezpieczną.
JavaScript jest jeszcze luźniejszy, Obiekty są niczym więcej niż zbiorem miejsc dla zmiennych lub funkcji. Można je zmienić lub zastąpić, ilekroć programista uzna to za konieczne. Mogą nawet zostać arbitralnie sklonowane jako „Prototypy” dla innych obiektów, przekazując w ten sposób wszystkie swoje umiejętności.
Kontrola dostępu jest drugą dużą różnicą między różnymi językami.
Niektóre języki, takie jak Java, mają bardzo ściśle egzekwowane modyfikatory dostępu, takie jak „prywatny” i „chroniony”, które dokładnie określają, jakie klasy i podklasy mogą używać danej zmiennej lub metody.
Inne, takie jak Python, są mniej formalne, wykorzystując konwencję podkreślenia przed nazwą metody lub zmiennej, aby wskazać, że jest ona prywatna.
Ostatecznie, Python jest całkowicie uzasadnionym językiem do programowania w sposób obiektowy, po prostu nie wymusza go tak rygorystycznie jak niektóre inne.