Objek sebagai konstruksi teoretis sangat sederhana: Ini adalah struktur yang menyimpan data, fungsi, atau keduanya. Idenya adalah bahwa struktur ini memiliki rasa "diri" yang tersirat dalam sebagian besar bahasa di luar Python. Ini disebut "deskriptor" dan memberikan objek titik referensi diri yang mengikat data (variabel atau bidang) dan fungsi (biasanya disebut metode) ke objek tertentu yang dimaksud. Gagasannya adalah bahwa Anda secara khusus menggunakan variabel atau metode yang dimiliki oleh instance tertentu (blok memori yang dialokasikan biasanya di bawahnya) daripada ke beberapa konstruksi yang lebih besar dan lebih umum.
Sistem objek cenderung bervariasi sehubungan dengan dua kategori besar: Warisan dan Akses.
Beberapa, seperti Java atau C ++, meminta Anda mendeklarasikan kelas yang bertindak sebagai "cetak biru" untuk objek yang kemudian dialokasikan. Kelas-kelas ini dan objek-objek mereka tidak dapat secara struktural diubah setelah dipakai. Mereka dapat memiliki konten mereka ditimpa dalam arti bahwa variabel dapat berubah tetapi strukturnya statis. Anda tidak dapat, misalnya, menambahkan metode baru ke HashMap di Java. Anda dapat memperluas antarmuka (pada dasarnya sebagian kelas yang diimplementasikan berfungsi sebagai kontrak) atau membuat subkelas untuk mendapatkan metode atau variabel tambahan yang Anda butuhkan bersama dengan semua variabel asli dan metode dari kelas tertentu yang bersangkutan.
Bahasa berbasis kelas lain, yang paling sering dikutip adalah Ruby, memungkinkan Anda untuk dengan mudah membuka kelas yang ada dan hanya menambahkan metode sesuai keinginan Anda. Ini adalah pertengkaran dan dianggap oleh banyak orang sebagai sangat, sangat berbahaya.
Javascript bahkan lebih longgar, Objek tidak lebih dari sekumpulan slot untuk variabel atau fungsi. Mereka dapat diubah atau ditimpa setiap kali programmer merasa perlu untuk melakukannya. Mereka bahkan dapat dikloning secara sewenang-wenang sebagai "Prototipe" untuk objek lain, dengan demikian meneruskan semua kemampuan mereka.
Kontrol akses adalah perbedaan besar antara berbagai bahasa.
Beberapa bahasa seperti Java memiliki pengubah akses yang sangat ketat seperti "privat" dan "dilindungi", yang mendefinisikan dengan tepat kelas dan subclass apa yang dapat menggunakan variabel atau metode tertentu.
Lainnya, seperti Python kurang formal, menggunakan konvensi garis bawah sebelum metode atau nama variabel untuk menunjukkan bahwa itu pribadi.
Pada akhirnya, Python adalah bahasa yang benar-benar sah untuk diprogram dengan cara yang berorientasi objek, itu hanya tidak menegakkannya seketat beberapa yang lain.