✅ What is a Class?
A class is a blueprint for creating objects.
It defines properties (variables) and behaviors (methods) that its objects will have.
✅ What is an Object?
An object is an instance of a class.
Think of a class as a cookie cutter, and objects as the cookies made from it.
💡 Example:
class Dog:
def bark(self):
print("Woof!")
my_dog = Dog() # Creating an object
my_dog.bark() # Calling a method on the objectWoof!🔍 Real-Life Analogy:
Concept | Analogy |
|---|---|
Class | Car Design Blueprint |
Object | A specific car on road |
<div class="infographic-pyclass">
<style>
.infographic-pyclass {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--c-kw: #7c3aed; --c-kw-soft: #ede9fe;
--c-self: #b45309; --c-self-soft: #fdf0dc;
--mono-font: 'IBM Plex Mono', 'SFMono-Regular', Menlo, monospace;
--display-font: 'Fraunces', Georgia, serif;
--body-font: 'Inter', system-ui, sans-serif;
box-sizing: border-box;
max-width: 720px;
margin: 0 auto;
font-family: var(--body-font);
color: var(--ink);
background: var(--paper);
}
.infographic-pyclass[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
--c-kw: #a78bfa; --c-kw-soft: #2c2140;
--c-self: #e0a458; --c-self-soft: #3a2c14;
}
.infographic-pyclass *, .infographic-pyclass *::before, .infographic-pyclass *::after { box-sizing: border-box; }
.infographic-pyclass .cl-wrap { padding: 0 clamp(1rem, 4vw, 2rem) 1.5rem; }
.infographic-pyclass h1 {
font-family: var(--display-font); font-weight: 600;
font-size: clamp(1.5rem, 5vw, 2.05rem); text-align: center; margin: 1.5rem 0 0.25rem; letter-spacing: -0.01em;
}
.infographic-pyclass .cl-sub { text-align: center; color: var(--ink-soft); font-size: 0.86rem; margin: 0 0 1.4rem; }
.infographic-pyclass .code-block {
font-family: var(--mono-font); font-size: 0.82rem; line-height: 1.75; white-space: pre;
background: var(--paper-alt); border: 1px solid var(--line); border-radius: 8px;
padding: 0.85rem 1rem; margin-bottom: 1.3rem;
}
.infographic-pyclass .code-block .kw { color: var(--c-kw); font-weight: 700; }
.infographic-pyclass .code-block .self { color: var(--c-self); font-weight: 700; }
.infographic-pyclass .code-block .cls { color: var(--accent); font-weight: 700; }
.infographic-pyclass .factory-row { display: flex; justify-content: center; gap: 0.4rem; margin-bottom: 0.7rem; flex-wrap: wrap; }
.infographic-pyclass .factory-row input {
font-family: var(--mono-font); font-size: 0.82rem; padding: 0.4rem 0.6rem;
border: 1.5px solid var(--line); border-radius: 5px; background: var(--paper-alt); color: var(--ink); width: 110px;
text-align: center;
}
.infographic-pyclass .factory-row input:focus { outline: none; border-color: var(--accent); }
.infographic-pyclass .create-btn {
font: inherit; font-family: var(--mono-font); font-size: 0.82rem; font-weight: 700;
background: var(--accent); color: #fff; border: none; border-radius: 999px;
padding: 0.5rem 1.1rem; cursor: pointer;
}
.infographic-pyclass .create-btn:disabled { opacity: 0.5; cursor: default; }
.infographic-pyclass .clear-row { display: flex; justify-content: center; margin-bottom: 1.1rem; }
.infographic-pyclass .clear-btn {
font: inherit; font-size: 0.78rem; font-weight: 600; color: var(--ink-soft);
background: none; border: 1px solid var(--line); padding: 0.35rem 0.75rem; cursor: pointer; border-radius: 999px;
}
.infographic-pyclass .obj-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.8rem; margin-bottom: 1rem; }
.infographic-pyclass .obj-card {
border: 2px solid var(--accent); background: var(--accent-soft); border-radius: 10px;
padding: 0.8rem 0.9rem; min-width: 170px; animation: cl-pop-in 0.3s ease;
}
@keyframes cl-pop-in { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); } }
.infographic-pyclass .obj-title { font-family: var(--mono-font); font-size: 0.78rem; font-weight: 700; color: var(--accent); margin-bottom: 0.5rem; text-align: center; }
.infographic-pyclass .attr-row { display: flex; justify-content: space-between; gap: 0.4rem; font-family: var(--mono-font); font-size: 0.75rem; margin-bottom: 0.25rem; }
.infographic-pyclass .attr-key { color: var(--ink-soft); }
.infographic-pyclass .attr-val { color: var(--ink); font-weight: 700; }
.infographic-pyclass .obj-call-btn {
display: block; width: 100%; margin-top: 0.6rem;
font: inherit; font-family: var(--mono-font); font-size: 0.74rem; font-weight: 700;
background: var(--paper); color: var(--accent); border: 1.5px solid var(--accent); border-radius: 6px;
padding: 0.32rem 0.5rem; cursor: pointer;
}
.infographic-pyclass .obj-result { font-family: var(--mono-font); font-size: 0.74rem; color: var(--ink-soft); margin-top: 0.4rem; min-height: 1.2em; text-align: center; }
.infographic-pyclass .cl-caption { text-align: center; font-size: 0.85rem; color: var(--ink-soft); }
.infographic-pyclass .cl-caption strong { color: var(--ink); font-family: var(--mono-font); }
@media (prefers-reduced-motion: reduce) {
.infographic-pyclass *, .infographic-pyclass *::before, .infographic-pyclass *::after {
animation-duration: 0.001ms !important; transition-duration: 0.001ms !important;
}
}
</style>
<div class="cl-wrap">
<h1>Classes & Objects</h1>
<p class="cl-sub">A class is the blueprint. Objects are the things you build from it.</p>
<div class="code-block"><span class="kw">class</span> <span class="cls">Dog</span>:
<span class="kw">def</span> __init__(<span class="self">self</span>, name, breed):
<span class="self">self</span>.name = name
<span class="self">self</span>.breed = breed
<span class="kw">def</span> bark(<span class="self">self</span>):
<span class="kw">return</span> f"{<span class="self">self</span>.name} says Woof!"</div>
<div class="factory-row">
<input id="nameInput" type="text" value="Rex" placeholder="name" />
<input id="breedInput" type="text" value="Labrador" placeholder="breed" />
<button class="create-btn" id="createBtn">Create: Dog("Rex", "Labrador")</button>
</div>
<div class="clear-row"><button class="clear-btn" id="clearBtn">↺ Clear all objects</button></div>
<div class="obj-grid" id="objGrid"></div>
<p class="cl-caption" id="clCaption">Each Dog(...) call builds a brand-new object with its own name and breed — none of them share memory.</p>
</div>
<script>
(function () {
var root = document.currentScript.closest('.infographic-pyclass')
|| document.querySelector('.infographic-pyclass');
var bodyAttr = document.body.getAttribute('data-darkmode');
var dark;
if (bodyAttr === 'true') { dark = true; }
else if (bodyAttr === 'false') { dark = false; }
else {
var match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) root.setAttribute('data-theme', 'dark');
var nameInput = root.querySelector('#nameInput');
var breedInput = root.querySelector('#breedInput');
var createBtn = root.querySelector('#createBtn');
var clearBtn = root.querySelector('#clearBtn');
var objGrid = root.querySelector('#objGrid');
var clCaption = root.querySelector('#clCaption');
var MAX_OBJS = 4;
var objects = [];
function updateCreateBtn() {
var n = (nameInput.value || '').trim() || 'Rex';
var b = (breedInput.value || '').trim() || 'Labrador';
createBtn.textContent = 'Create: Dog("' + n + '", "' + b + '")';
createBtn.disabled = objects.length >= MAX_OBJS;
}
nameInput.addEventListener('input', updateCreateBtn);
breedInput.addEventListener('input', updateCreateBtn);
function updateCaption() {
if (objects.length <= 1) {
clCaption.innerHTML = 'Each Dog(...) call builds a brand-new object with its own name and breed — none of them share memory.';
} else {
var parts = objects.map(function (o) { return '<strong>' + o.varName + '</strong>="' + o.name + '"'; }).join(', ');
clCaption.innerHTML = parts + ' — same class, same bark() method, completely separate data.';
}
}
function addObject() {
if (objects.length >= MAX_OBJS) return;
var name = (nameInput.value || '').trim() || 'Rex';
var breed = (breedInput.value || '').trim() || 'Labrador';
var idx = objects.length + 1;
var varName = 'dog' + idx;
var card = document.createElement('div');
card.className = 'obj-card';
card.innerHTML =
'<div class="obj-title">' + varName + ' = Dog(...)</div>' +
'<div class="attr-row"><span class="attr-key">.name</span><span class="attr-val">"' + name + '"</span></div>' +
'<div class="attr-row"><span class="attr-key">.breed</span><span class="attr-val">"' + breed + '"</span></div>' +
'<button class="obj-call-btn">call ' + varName + '.bark()</button>' +
'<div class="obj-result"></div>';
objGrid.appendChild(card);
var btnEl = card.querySelector('.obj-call-btn');
var resultEl = card.querySelector('.obj-result');
btnEl.addEventListener('click', function () {
resultEl.textContent = '"' + name + ' says Woof!"';
});
objects.push({ varName: varName, name: name, breed: breed });
updateCreateBtn();
updateCaption();
}
createBtn.addEventListener('click', addObject);
clearBtn.addEventListener('click', function () {
objects = [];
objGrid.innerHTML = '';
updateCreateBtn();
updateCaption();
});
updateCreateBtn();
addObject();
})();
</script>
</div>