برنامه نویسی و ITپایتون

مفهوم کلاس در پایتون – صفر تاصد class در پایتون

در زبان برنامه‌نویسی پایتون، کلاس (class) نوعی شی است که به کاربر اجازه می‌دهد تا اشیاء مجزا را ایجاد و مدیریت کند که هرکدام نمونه‌ای از کلاس هستند. class در پایتون با استفاده از کلمه کلیدی class و به دنبال آن نام کلاس و یک علامت دو نقطه (:) تعریف می‌شوند. در داخل کلاس، می‌توان متدها (توابع) و ویژگی‌ها (متغیرها) را تعریف کرد که توسط هر نمونه از کلاس قابل‌دسترسی هستند. در این مطلب آموزشی از مکتب خونه قرار است اطلاعات کاملی از class در پایتون ارائه شود تا در پایان کاربران درک خوبی از این عنصر مهم در کدنویسی پایتون داشته باشند.

قبل از اینکه به مفهوم و نحوه پیاده‌سازی و توضیح کلاس در پایتون بپردازیم ابتدا بهتر است به‌صورت مختصر، تعریفی از خود کلاس در برنامه‌نویسی داشته باشیم تا بهتر بتوانیم مفهوم کلاس‌ها در زبان برنامه‌نویسی پایتون را درک کنیم.

کلاس در برنامه‌نویسی چیست؟

در برنامه‌نویسی، کلاس طرحی اولیه یا نمونه اولیه‌ای است که متغیرها و متدهایی (توابع) را تعریف می‌کند. درواقع می‌توان گفت که کلاس در برنامه‌نویسی قالبی برای ایجاد اشیاء است.

آموزش پایتون مقدماتی با جادی میرمیرانی

 

همچنین کلاس‌ها وسیله‌ای برای ترکیب داده‌ها و توابع باهم فراهم می‌کنند. در بخش بعدی به مفهوم اینکه کلاس پایتون چیست پرداخته خواهد شد.

کلاس‌ در پایتون چیست؟

ازآنجایی‌که پایتون نوعی زبان برنامه‌نویسی شی گرا (OOP) به‌حساب می‌آید، همه عناصر در آن نشان‌دهنده یک شی هستند. لیست‌ها، تاپل‎ها، مجموعه‌ها، دیکشنری‌ها، توابع و غیره همگی نمونه‌هایی از اشیاء پایتون به‌حساب می‌آیند. درواقع می‌توان گفت که شی در پایتون موجودیتی از آیتم‌های داده و متدهایی است که رفتار آن آیتم‌ها را توصیف می‌کند.

Class در پایتون چیست

در مقابل، کلاس پایتون یک الگو یا سازنده است که برای ایجاد اشیاء پایتون استفاده می‌شود. ما می‌توانیم آن را به‌عنوان یک دستور آشپزی در دنیای واقعی در نظر بگیریم که در آن تمام مواد و مقدار آن‌ها و کل فرآیند پخت‌وپز به صورت گام‌به‌گام شرح داده شده است. برای مثال، می‌توانیم دستور پخت کیک را با یک کلاس پایتون و کیکی که طبق آن دستور پخته شده است را با یک شی (به‌عنوان‌مثال، نمونه‌ای از آن کلاس) مقایسه کنیم. با استفاده از همان دستور (کلاس) می‌توانیم کیک‌های (اشیاء) زیادی تولید کنیم. این دقیقاً مقیاس ایجاد یک کلاس در پایتون است: برای تعریف عناصر داده و قوانینی که نحوه تعامل این عناصر و تغییر حالت آن‌ها را تعیین می‌کند و سپس از این نمونه اولیه برای ساخت اشیاء مختلف (نمونه‌های کلاس) به روشی از پیش تعریف‌شده استفاده به نام کلاس در پایتون استفاده می‌شود.

انواع Class در پایتون

با توسعه پایتون 3، اصطلاحات کلاس و نوع برای اشیاء در پایتون یکسان شد، به این معنی که برای هر شی x، مقادیر x.class و type(x) برابر هستند. مثال زیر این موضوع را برای class در پایتون و ارتباط آن با شئ در پایتون نشان می‌دهد.

a <span class="token operator">=</span> <span class="token number">5</span>
b <span class="token operator">=</span> <span class="token string">'Hello World'</span>
c <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>

<span class="token keyword">for</span> var <span class="token keyword">in</span> <span class="token punctuation">[</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">]</span><span class="token punctuation">:</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">type</span><span class="token punctuation">(</span>var<span class="token punctuation">)</span><span class="token operator">==</span>var<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>

خروجی قطعه کد بالا به صورت زیر است:

True

True

True

با این حال، چندین کلاس داخلی (انواع داده) در پایتون وجود دارد: عدد صحیح، شناور، رشته، بولی، لیست، محدوده، تاپل، مجموعه، دیکشنری و برخی دیگر که به‌ندرت استفاده از آن‌ها استفاده می‌شوند: در زیر چند تا از این نوع داده‌ها آورده شده‌اند.

a <span class="token operator">=</span> <span class="token number">5.2</span>
b <span class="token operator">=</span> <span class="token string">'Hello World'</span>
c <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
d <span class="token operator">=</span> <span class="token boolean">False</span>
e <span class="token operator">=</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span>
f <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span>
g <span class="token operator">=</span> <span class="token builtin">complex</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span>

<span class="token keyword">for</span> var <span class="token keyword">in</span> <span class="token punctuation">[</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> c<span class="token punctuation">,</span> d<span class="token punctuation">,</span> e<span class="token punctuation">,</span> f<span class="token punctuation">,</span> g<span class="token punctuation">]</span><span class="token punctuation">:</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span>var<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>

خروجی این کد چیزی شبیه این است:

آموزش کلاس در پایتون

توابع داخلی و تعریف‌شده توسط کاربر کلاس و همچنین انواع خاص خود را دارند:

<span class="token keyword">def</span> <span class="token function">my_func</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">pass</span>

<span class="token keyword">print</span><span class="token punctuation">(</span>my_func<span class="token punctuation">.</span>__class__

خروجی به صورت زیر است:

<span style="font-size: 12.0pt; font-family: 'IRANSans',serif; color: black;"><class 'function'></span>
<span style="font-size: 12.0pt; font-family: 'IRANSans',serif; color: black;"><class 'builtin_function_or_method'></span>

وقتی از کتابخانه‌های اضافی پایتون مانند پانداها یا نامپای استفاده می‌کنیم، می‌توانیم اشیایی از کلاس‌ها/انواع مربوط به آن کتابخانه‌ها ایجاد کنیم که قطعه کد زیر این مفهوم را به خوبی بیان می‌کند.

<span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd
<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np

s <span class="token operator">=</span> pd<span class="token punctuation">.</span>Series<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">'a'</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
df <span class="token operator">=</span> pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>s<span class="token punctuation">)</span>
arr <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

<span class="token keyword">print</span><span class="token punctuation">(</span>s<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>df<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>

خروجی این قطعه کد به صورت زیر است:

<span style="font-size: 12.0pt; font-family: 'IRANSans',serif; color: black;"><class 'pandas.core.series.Series'></span>
<span style="font-size: 12.0pt; font-family: 'IRANSans',serif; color: black;"><class 'pandas.core.frame.DataFrame'></span>
<span style="font-size: 12.0pt; font-family: 'IRANSans',serif; color: black;"><class 'numpy.ndarray'></span>

با این حال، مزیت واقعی class در پایتون این است که می‌توانیم کلاس‌های خود را ایجاد کرده و از آن‌ها برای حل وظایف خاص استفاده کنیم.

تعریف کلاس‌ در پایتون

برای تعریف کلاس پایتون، از کلمه کلیدی class و به دنبال آن نام کلاس جدید و کولون (علامت دونقطه) استفاده می‌شود. برای مثال برای ایجاد یک کلاس خالی باید به صوری زیر عمل کرد:

<span class="token keyword">class</span> <span class="token class-name">MyClass</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>

قرارداد نام‌گذاری class در پایتون بسیار مهم است و بیشتر برنامه نویسان از سبک Camel Case می‌کنند. در این سبک هر کلمه با یک حرف بزرگ شروع می‌شود و کلمات باهم نوشته می‌شوند و هیچ جداکننده‌ای بین آن‌ها قرار نمی‌گیرد. یکی دیگر از قراردادهای بسیار توصیه‌شده برای نام‌گذاری کلاس در پایتون،  اضافه کردن یک docstring خواهد بود. docstring اولین رشته در سازنده کلاس بوده که به‌طور خلاصه توضیح می‌دهد که کلاس برای چه هدفی ایجاد شده است. مثال زیر نحوه اضافه کردن docstring به کلاس ساده بالا را نشان می‌دهد.

<span class="token keyword">class</span> <span class="token class-name">MyClass</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">'''This is a new class'''</span>
<span class="token keyword">pass</span>

کد بالا یک شی کلاس جدید به نام MyClass ایجاد می‌کند. نکته جالب در اینجا این است که چون هر شی در پایتون به یک کلاس (نوع) مرتبط بوده، کلاس/نوع کلاس جدید (و همچنین سایر کلاس‌های پایتون، از جمله کلاس‌های داخلی) نوع هستند:

<span class="token keyword">class</span> <span class="token class-name">MyClass</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">'''This is a new class'''</span>
<span class="token keyword">pass</span>

خروجی به صورت زیر است:

<class ‘type’>

<class ‘type’>

با این حال، اجازه دهید به موضوع اصلی برگردیم. به‌طور کلی، هنگام تعریف یک کلاس جدید، یک شی کلاس جدید نیز ایجاد خواهد شد که شامل تمام ویژگی‌ها (متغیرها و متدها) مربوط به آن کلاس است. همچنین در آن برخی از صفات بامعنای خاص نیز وجود دارد، آن‌هایی که با دو آندرلاین شروع و پایان می‌یابند و مربوط به همه کلاس‌ها هستند. به‌عنوان‌مثال، ویژگی doc__ رشته docstring آن کلاس یا None را برمی‌گرداند، اگر هیچ docstring اضافه نشده باشد.

دوره پیشنهادی: آموزش رایگان پایتون مقدماتی

مثالی از نحوه ایجاد کلاس در پایتون

<span class="token keyword">class</span> <span class="token operator"><</span>classname<span class="token operator">></span><span class="token punctuation">:</span>
    <span class="token operator"><</span>statement1<span class="token operator">></span>
    <span class="token operator"><</span>statement2<span class="token operator">></span>
    <span class="token punctuation">.</span>
    <span class="token punctuation">.</span>
    <span class="token operator"><</span>statementn<span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">/</span>statementn<span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>statement2<span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>statement1<span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>classname<span class="token operator">></span>

طبق سینتکس بالا و همان‌طور که گفته شد، یک کلاس با استفاده از کلمه کلیدی class و به دنبال آن نام کلاس و عملگر: بعد از نام کلاس تعریف می‌شود که به شما امکان می‌دهد در خط بعدی برای تعریف اعضای کلاس ادامه دهید. افراد زیر اعضای کلاس هستند.

  • ویژگی‌های کلاس
  • سازنده
  • ویژگی‌های نمونه
  • خواص
  • متدهای کلاس

یک کلاس نیز می‌تواند بدون هیچ عضوی تعریف شود. مثال زیر یک کلاس خالی را با استفاده از کلمه کلیدی pass تعریف می‌کند.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>

کلاس‌ های والد و فرزند در پایتون

در پایتون از کلاس‌های والد و فرزند برای ایجاد سلسله‌مراتب کلاس استفاده می‌شود که راهی برای سازمان‌دهی کلاس‌ها در یک ساختار سلسله‌مراتبی است. کلاس والد کلاسی به‌حساب می‌آید که توسط کلاس دیگری به ارث می‌رسد که به‌عنوان کلاس فرزند شناخته می‌شود. کلاس فرزند به تمام ویژگی‌ها و متدهای کلاس والد دسترسی دارد و همچنین می‌تواند ویژگی‌ها و متدهای خود را اضافه کند.

آموزش پیشرفته پایتون جادی

 

به‌عنوان‌مثال، یک کلاس والد ممکن است Animal و یک کلاس فرزند ممکن است Dog نامیده شود. کلاس Dog تمام ویژگی‌ها و روش‌ها را از کلاس Animal به ارث می‌برد، مانند توانایی حرکت و ایجاد صدا. سپس کلاس Dog می‌تواند ویژگی‌ها و روش‌های دیگری مانند توانایی پارس کردن یا دویدن را به خود اضافه کند. این ویژگی‌ها برای class در پایتون به‌عنوان وراثت یا ارث بری در پایتون شناخته می‌شود.

ویژگی‌ های کلاس

ویژگی‌های کلاس متغیرهایی هستند که مستقیماً در کلاس تعریف‌شده‌اند و توسط تمام اشیاء کلاس به اشتراک گذاشته می‌شوند. با استفاده از نام کلاس و همچنین با استفاده از اشیاء می‌توان به ویژگی‌های کلاس دسترسی داشت.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
schoolName <span class="token operator">=</span> <span class="token string">'XYZ School'</span>

در بالا، schoolName یک ویژگی کلاس است که در داخل یک کلاس تعریف‌شده است. مقدار schoolName برای همه اشیا یکسان می‌ماند مگر اینکه به‌صراحت اعلام شود که این‌طور نیست.

<span class="token operator">&</span>gt<span class="token punctuation">;</span><span class="token operator">&</span>gt<span class="token punctuation">;</span><span class="token operator">&</span>gt<span class="token punctuation">;</span> Student<span class="token punctuation">.</span>schoolName
<span class="token string">'XYZ School'</span>
<span class="token operator">&</span>gt<span class="token punctuation">;</span><span class="token operator">&</span>gt<span class="token punctuation">;</span><span class="token operator">&</span>gt<span class="token punctuation">;</span> std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">&</span>gt<span class="token punctuation">;</span><span class="token operator">&</span>gt<span class="token punctuation">;</span><span class="token operator">&</span>gt<span class="token punctuation">;</span> std<span class="token punctuation">.</span>schoolName
<span class="token string">'XYZ School'</span>

همان‌طور که می‌بینید، یک ویژگی کلاس توسط Student.schoolName و همچنین std.schoolName قابل‌دسترسی است. تغییر مقدار ویژگی کلاس با استفاده از نام کلاس، آن را در تمام نمونه‌ها تغییر می‌دهد. با این حال، تغییر مقدار ویژگی class در پایتون با استفاده از نمونه، به نمونه‌ها یا کلاس‌های دیگر منعکس نمی‌شود.

Student<span class="token punctuation">.</span>schoolName <span class="token operator">=</span> <span class="token string">'ABC School'</span> <span class="token comment"># change attribute value using class name</span>
 std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>schoolName
<span class="token string">'ABC School'</span>   <span class="token comment"># value changed for all instances</span>
 std<span class="token punctuation">.</span>schoolName <span class="token operator">=</span> <span class="token string">'My School'</span>  <span class="token comment"># changing instance's attribute</span>
 std<span class="token punctuation">.</span>schoolName
<span class="token string">'My School'</span>
 Student<span class="token punctuation">.</span>schoolName <span class="token comment"># instance level change not reflectd to class attribute</span>
<span class="token string">'ABC School'</span>
 std2 <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std2<span class="token punctuation">.</span>schoolName
<span class="token string">'ABC School'</span>

دسترسی به ویژگی Class در پایتون

برای دسترسی به ویژگی کلاس، از عملگر نقطه (.) استفاده می‌شود. در زیر کلاسی به تحت عنوان چراغ راهنمایی و رانندگی (TrafficLight)  ایجاد شده که رنگ‌ها از ویژگی‌های آن به‌حساب می‌آیند. مثال زیر نحوه دستیابی به ویژگی کلاس در پایتون را نشان می‌دهد.

<span class="token keyword">class</span> <span class="token class-name">TrafficLight</span><span class="token punctuation">:</span>
    <span class="token triple-quoted-string string">'''This is a traffic light class'''</span>
    color <span class="token operator">=</span> <span class="token string">'green'</span>

    <span class="token keyword">def</span> <span class="token function">action</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Go'</span><span class="token punctuation">)</span>

<span class="token keyword">print</span><span class="token punctuation">(</span>TrafficLight<span class="token punctuation">.</span>__doc__<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>TrafficLight<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>TrafficLight<span class="token punctuation">.</span>color<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>TrafficLight<span class="token punctuation">.</span>action<span class="token punctuation">)</span>

خروجی به صورت زیر خواهد بود:

class در پایتون چیست

تابع کلاس پایتون action()‎ تعریف‌شده در کلاس TrafficLight در بالا نمونه‌ای از متد Class در پایتون است، درحالی‌که متغیر رنگ یک متغیر کلاس به‌حساب می‌آید.

سازنده

در پایتون، هر زمان که یک شی جدید از یک کلاس نمونه‌سازی می‌شود، متد سازنده به‌طور خودکار فراخوانی خواهد شد، مانند سازنده‌های C#‎ یا جاوا. هر سازنده در پایتون باید یک نام خاص __init__()‎ و یک پارامتر خاص به نام self داشته باشد.

نکته: اولین پارامتر هر متد در یک کلاس باید self باشد که به شیء فراخوانی اشاره دارد. با این حال، کاربر می‌تواند هر نامی را برای پارامتر اول انتخاب کند، نه لزوماً self. مثال زیر یک سازنده را تعریف می‌کند.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># constructor method</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Constructor invoked'</span><span class="token punctuation">)</span>

اکنون، هر زمان که یک شی از کلاس Student ایجاد شود، مطابق شکل زیر، متد سازنده __init__() (__init__ self)  فراخوانی می‌شود.

s1 <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
Constructor invoked
s2 <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
Constructor invoked

سازنده در پایتون برای تعریف ویژگی‌های یک نمونه و تخصیص مقادیر به آن‌ها استفاده می‌شود و اهمیت بسیار زیادی دارد.

نکته: __init__ یک متد خاص در کلاس‌های پایتون است. به‌عنوان سازنده شناخته می‌شود و زمانی که یک شی از یک کلاس ایجاد شد، به‌طور خودکار فراخوانی می‌شود. می‌توان از آن برای تنظیم مقادیر متغیرهای نمونه در زمان ایجاد شی استفاده کرد.

ویژگی‌های نمونه

ویژگی‌های نمونه، خواص یا ویژگی‌هایی هستند که به یک نمونه از یک کلاس پایتون متصل می‌شوند. ویژگی‌های نمونه در سازنده تعریف خواهند شد. مثال زیر ویژگی‌های نمونه نام و سن را در سازنده تعریف می‌کند.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
schoolName <span class="token operator">=</span> <span class="token string">'XYZ School'</span> <span class="token comment"># class attribute</span>

<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># constructor</span>
    self<span class="token punctuation">.</span>name <span class="token operator">=</span> <span class="token string">''</span> <span class="token comment"># instance attribute</span>
    self<span class="token punctuation">.</span>age <span class="token operator">=</span> <span class="token number">0</span> <span class="token comment"># instance attribute</span>

همان‌طور که در زیر نشان داده شده است، می‌توان با استفاده از علامت نقطه: [نام نمونه]، به یک ویژگی نمونه دسترسی داشت.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>name
<span class="token string">''</span>
 std<span class="token punctuation">.</span>age
<span class="token number">0</span>

همان‌طور که در زیر نشان داده شده است می‌توانی مقدار ویژگی‌ها را با استفاده از علامت نقطه تنظیم کرد.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>name <span class="token operator">=</span> <span class="token string">"Bill"</span> <span class="token comment"># assign value to instance attribute</span>
 std<span class="token punctuation">.</span>age<span class="token operator">=</span><span class="token number">25</span>        <span class="token comment"># assign value to instance attribute</span>
 std<span class="token punctuation">.</span>name          <span class="token comment"># access instance attribute value</span>
Bill
 std<span class="token punctuation">.</span>age           <span class="token comment"># access value to instance attribute</span>
<span class="token number">25</span>

کاربر قادر است تا مقادیر ویژگی‌های نمونه را از طریق سازنده تعیین کند. برای مثال سازنده زیر برای Class  در پایتون شامل پارامترهای نام و سن به غیر از پارامتر self است.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> name<span class="token punctuation">,</span> age<span class="token punctuation">)</span><span class="token punctuation">:</span>
    self<span class="token punctuation">.</span>name <span class="token operator">=</span> name
    self<span class="token punctuation">.</span>age <span class="token operator">=</span> age

اکنون می‌توان مقادیر را در حین ایجاد یک نمونه مشخص کرد. مثال زیر این موضوع را نشان می‌دهد.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token string">'Bill'</span><span class="token punctuation">,</span><span class="token number">25</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>name
<span class="token string">'Bill'</span>
 std<span class="token punctuation">.</span>age
<span class="token number">25</span>

نکته: لازم نیست مقدار پارامتر self مشخص شود. به صورت داخلی و به‌طور خودکار این پارامتر در پایتون اختصاص داده خواهد شد.

همچنین می‌توان مقادیر پیش‌فرض را برای ویژگی‌های نمونه تنظیم کرد. کد زیر مقادیر پیش‌فرض پارامترهای سازنده را تعیین می‌کند؛ بنابراین، اگر مقادیر در هنگام ایجاد یک شی ارائه نشده باشند، مقادیر بعدی به آن‌ها اختصاص داده می‌شود.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">"Guest"</span><span class="token punctuation">,</span> age<span class="token operator">=</span><span class="token number">25</span><span class="token punctuation">)</span>
    self<span class="token punctuation">.</span>name<span class="token operator">=</span>name
    self<span class="token punctuation">.</span>age<span class="token operator">=</span>age

اکنون می‌توان مانند کد زیر یک شی با مقادیر پیش‌فرض ایجاد کرد.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>name
<span class="token string">'Guest'</span>
 std<span class="token punctuation">.</span>age
<span class="token number">25</span>

ویژگی‌ های کلاس در پایتون

در پایتون، یک ویژگی در کلاس را می‌توان با استفاده از تابع ()property تعریف کرد. متد ()property در پایتون یک رابط (interface) برای ویژگی‌های نمونه برای Class در پایتون فراهم کرده و ویژگی‌های نمونه را کپسوله می‌کند و همچنین یک ویژگی مانند جاوا و سی شارپ ارائه می‌دهد.

متد property()‎ متدهای get، set و delete را به‌عنوان آرگومان می‌گیرد و یک شی از کلاس ویژگی را برمی‌گرداند. مثال زیر نحوه ایجاد یک ویژگی در پایتون را با استفاده از تابع ()property نشان می‌دهد.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
    self<span class="token punctuation">.</span>__name<span class="token operator">=</span><span class="token string">''</span>
<span class="token keyword">def</span> <span class="token function">setname</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> name<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'setname() called'</span><span class="token punctuation">)</span>
    self<span class="token punctuation">.</span>__name<span class="token operator">=</span>name
<span class="token keyword">def</span> <span class="token function">getname</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'getname() called'</span><span class="token punctuation">)</span>
    <span class="token keyword">return</span> self<span class="token punctuation">.</span>__name
name<span class="token operator">=</span><span class="token builtin">property</span><span class="token punctuation">(</span>getname<span class="token punctuation">,</span> setname<span class="token punctuation">)</span>

در مثال بالا، ویژگی (getname، setname) شی ویژگی را بازمی‌گرداند و آن را به name اختصاص می‌دهد؛ بنابراین، ویژگی name ویژگی نمونه خصوصی __name را پنهان می‌کند. ویژگی name مستقیماً قابل‌دسترسی است، اما در داخل متد getname()‎ یا setname()‎ را فراخوانی می‌کند، همان‌طور که در زیر نشان داده شده است.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>name<span class="token operator">=</span><span class="token string">"Steve"</span>
setname<span class="token punctuation">(</span><span class="token punctuation">)</span> called
 std<span class="token punctuation">.</span>name
getname<span class="token punctuation">(</span><span class="token punctuation">)</span> called
<span class="token string">'Steve'</span>

متدهای کلاس در پایتون

کاربر می‌تواند هر تعداد متد را که می‌خواهد در یک کلاس پایتون با استفاده از کلمه کلیدی def تعریف کند. هر متد باید اولین پارامتر خود را داشته باشد که به‌طور کلی به‌عنوان پارامتر پیش‌فرض self نامیده می‌شود که به نمونه فراخوانی اشاره دارد.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">displayInfo</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># class method</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Student Information'</span><span class="token punctuation">)</span>

پارامتر Self فقط یک نام معمولی برای اولین آرگومان یک متد در کلاس است. متدی که به‌عنوان mymethod (self, a, b) تعریف‌شده است باید به‌عنوان x.mymethod(a, b) برای شی x کلاس فراخوانی شود. متد کلاس‌بالا را می‌توان به‌عنوان یک تابع پایتون فراخوانی کرد، همان‌طور که در زیر نشان داده شده است.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>displayInfo<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token string">'Student Information'</span>

همان‌طور که گفته شد، لازم نیست پارامتر اول self نام‌گذاری شود. کاربر می‌تواند هر نامی را که به نمونه‌ای از متد فراخوانی اشاره دارد، انتخاب کند. متد displayInfo()‎ زیر اولین پارامتر را به‌جای self به‌عنوان obj نام‌گذاری کرده و بدون هیچ مشکلی کار می‌کند.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">displayInfo</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># class method</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Student Information'</span><span class="token punctuation">)</span>

تعریف یک متد برای class در پایتون بدون پارامتر self، هنگام فراخوانی یک متد، یک استثنا ایجاد می‌کند. مثال زیر این موضوع را نشان می‌دهد.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">displayInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># method without self parameter</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Student Information'</span><span class="token punctuation">)</span>

خروجی به صورت زیر است:

کلاس در پایتون چیست

این متد می‌تواند با استفاده از پارامتر self به ویژگی‌های نمونه دسترسی پیدا کند.

<span class="token keyword">class</span> <span class="token class-name">Student</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> name<span class="token punctuation">,</span> age<span class="token punctuation">)</span><span class="token punctuation">:</span>
    self<span class="token punctuation">.</span>name <span class="token operator">=</span> name
    self<span class="token punctuation">.</span>age <span class="token operator">=</span> age
<span class="token keyword">def</span> <span class="token function">displayInfo</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># class method</span>
    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Student Name: '</span><span class="token punctuation">,</span> self<span class="token punctuation">.</span>name<span class="token punctuation">,</span><span class="token string">', Age: '</span><span class="token punctuation">,</span> self<span class="token punctuation">.</span>age<span class="token punctuation">)</span>

اکنون می‌توان متد را مانند قطعه کد زیر فراخوانی کرد.

std <span class="token operator">=</span> Student<span class="token punctuation">(</span><span class="token string">'Steve'</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span>
 std<span class="token punctuation">.</span>displayInfo<span class="token punctuation">(</span><span class="token punctuation">)</span>
Student Name<span class="token punctuation">:</span> Steve <span class="token punctuation">,</span> Age<span class="token punctuation">:</span> <span class="token number">25</span>

اعلان اشیاء کلاس در پایتون

کاربر می‌تواند یک شی کلاس را به متغیری اختصاص دهد و یک شی (نمونه) جدید از آن کلاس در پایتون ایجاد کند. این فرآیند را نمونه‌سازی نام دارد. شیء کلاسی که به متغیری اختصاص داده می‌شود، کپی آن کلاس با مقادیر واقعی است که این شیء را از سایر شیءهای همان کلاس متمایز می‌کند.

مرجع کامل انواع آموزش پایتون به صورت تضمینی + اعطای گواهینامه دوره

 

یک شی کلاس دارای ویژگی‌های زیر است:

  • state – داده‌ها (متغیرهای) شی
  • رفتار – متد شی
  • هویت – نام منحصربه‌فرد شی

در مثال بالا که برای چراغ راهنمایی بود، اگر شی کلاس از کلاس TrafficLight را به یک متغیر traffic اختصاص داد باید به صورت زیر عمل کرد:

<span class="token keyword">class</span> <span class="token class-name">TrafficLight</span><span class="token punctuation">:</span>
    <span class="token triple-quoted-string string">'''This is a traffic light class'''</span>
    color <span class="token operator">=</span> <span class="token string">'green'</span>

    <span class="token keyword">def</span> <span class="token function">action</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
        <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Go'</span><span class="token punctuation">)</span>

traffic <span class="token operator">=</span> TrafficLight<span class="token punctuation">(</span><span class="token punctuation">)</span>

<span class="token keyword">print</span><span class="token punctuation">(</span>traffic<span class="token punctuation">.</span>__doc__<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>traffic<span class="token punctuation">.</span>__class__<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>traffic<span class="token punctuation">.</span>color<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>traffic<span class="token punctuation">.</span>action<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>traffic<span class="token punctuation">.</span>action<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>

خروجی این مثال به صورت زیر است:

مفهوم class در پایتون

در قطعه کد بالا نمونه شی جدید از کلاس TrafficLight به نام ترافیک ایجاد شد و با استفاده از نام شی (هویت) به ویژگی‌های آن دسترسی پیدا خواهد شد. باید توجه داشت که کلاس شی جدید با کلاس خود کلاس متفاوت است (main.TrafficLight به‌جای type). همچنین، ویژگی action مقادیر متفاوتی را برای نمونه کلاس و خود کلاس برمی‌گرداند: یک شی متد در حالت اول و یک شی تابع در حالت دوم. فراخوانی متد ()action بر روی شی ترافیک (با تعیین ترافیک.action()) “Go” را به دست می‌دهد که در حال حاضر تنها خروجی ممکن از این متد از کلاس TrafficLight است.

نکته مهم دیگری که در کد بالا باید به آن توجه کرد این است که از پارامتر self در تعریف تابع در داخل کلاس استفاده شده است. با این حال، زمانی که متد ()action روی شی ترافیک فراخوانی می‌شود، هیچ آرگومانی اضافه نشده است. پارامتر self این‌گونه عمل می‌کند: هر بار که یک نمونه کلاس یکی از متدهای خود را فراخوانی می‌کند، خود شی به‌عنوان اولین آرگومان ارسال می‌شود. به‌عبارت‌دیگر ترافیک. action()‎ معادل TrafficLight.action(traffic) است. به‌طور کلی، زمانی که یک متد class در پایتون با چندین پارامتر تعریف می‌شود، یک شی از این کلاس ایجاد می‌شود و آن متد را روی شی فراخوانی خواهند کرد. پایتون این عمل را به صورت زیر انجام می‌دهد:

obj<span class="token punctuation">.</span>method<span class="token punctuation">(</span>arg1<span class="token punctuation">,</span> arg2<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">,</span> argN<span class="token punctuation">)</span> ➡️ MyClass<span class="token punctuation">.</span>method<span class="token punctuation">(</span>obj<span class="token punctuation">,</span> arg1<span class="token punctuation">,</span> arg2<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">,</span> argN<span class="token punctuation">)</span>

بنابراین، هر متد کلاس در پایتون باید این پارامتر اول اضافی را داشته باشد که خود شیء را نشان می‌دهد، حتی اگر هیچ پارامتر دیگری نداشته باشد. بر اساس قرارداد نام‌گذاری پایتون، توصیه می‌شود که این پارامتر self نام‌گذاری شود و همان‌طور که گفته شد اجباری برای این نام وجود ندارد.

دوره پیشنهادی: آموزش مبانی برنامه‌نویسی پایتون

اضافه کردن متد جدید به کلاس در پایتون

در بخش از آموزش Class در پایتون نحوه اضافه کردن متد جدید به کلاس آموزش داده خواهد شد.  بیاید کلاس TrafficLight بالا را در این مرحله معنادارتر کرده و درعین‌حال یک متد خاص جدید را معرفی کنیم:

<span class="token keyword">class</span> <span class="token class-name">TrafficLight</span><span class="token punctuation">:</span>
    <span class="token triple-quoted-string string">'''This is an updated traffic light class'''</span>
    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> color<span class="token punctuation">)</span><span class="token punctuation">:</span>
        self<span class="token punctuation">.</span>color <span class="token operator">=</span> color

    <span class="token keyword">def</span> <span class="token function">action</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
        <span class="token keyword">if</span> self<span class="token punctuation">.</span>color<span class="token operator">==</span><span class="token string">'red'</span><span class="token punctuation">:</span>
            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Stop &amp; wait'</span><span class="token punctuation">)</span>
        <span class="token keyword">elif</span> self<span class="token punctuation">.</span>color<span class="token operator">==</span><span class="token string">'yellow'</span><span class="token punctuation">:</span>
            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Prepare to stop'</span><span class="token punctuation">)</span>
        <span class="token keyword">elif</span> self<span class="token punctuation">.</span>color<span class="token operator">==</span><span class="token string">'green'</span><span class="token punctuation">:</span>
            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Go'</span><span class="token punctuation">)</span>
        <span class="token keyword">else</span><span class="token punctuation">:</span>
            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Stop drinking '</span><span class="token punctuation">)</span>

yellow <span class="token operator">=</span> TrafficLight<span class="token punctuation">(</span><span class="token string">'yellow'</span><span class="token punctuation">)</span>
yellow<span class="token punctuation">.</span>action<span class="token punctuation">(</span><span class="token punctuation">)</span>

ما از متد init()‎ (با نام مستعار سازنده کلاس) برای مقداردهی اولیه وضعیت شی (به‌عنوان‌مثال، اختصاص دادن تمام متغیرهای کلاس در لحظه نمونه‌سازی شی) استفاده می‌کنیم. در این مورد، ما یک کلاس جدید پایتون TrafficLight با دو روش ایجاد کردیم: init()‎ برای مقداردهی اولیه رنگ چراغ راهنمایی و action()‎ برای پیشنهاد عمل مربوطه بر اساس رنگ چراغ راهنمایی.

مطلب پیشنهادی: آشنایی با بهترین کتاب‌های آموزش پایتون انگلیسی و فارسی

ایجاد و حذف ویژگی‌های شی در پایتون

می‌توان پس از نمونه‌سازی یک شیء کلاس در پایتون، یک ویژگی جدید به آن اضافه کرد: مثال زیر این موضوع را نشان می‌دهد:

green <span class="token operator">=</span> TrafficLight<span class="token punctuation">(</span><span class="token string">'green'</span><span class="token punctuation">)</span>
yellow <span class="token operator">=</span> TrafficLight<span class="token punctuation">(</span><span class="token string">'yellow'</span><span class="token punctuation">)</span>

green<span class="token punctuation">.</span>next_color <span class="token operator">=</span> <span class="token string">'red'</span>

<span class="token keyword">print</span><span class="token punctuation">(</span>green<span class="token punctuation">.</span>next_color<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>yellow<span class="token punctuation">.</span>next_color<span class="token punctuation">)</span>

خروجی به صورت زیر است:

نحوه تعریف کلاس در زبان پایتون

در قطعه کد بالا، یک ویژگی جدید next_color برای شی ‘green’ ایجاد شده و هم‌زمان به “red” اختصاص داده شده است. ازآنجایی‌که این ویژگی در تعریف TrafficLightclass نیست، وقتی کاربر سعی می‌کند آن را برای یک شی دیگر (مثلاً ‘yellow’) بررسی کند، یک AttributeError دریافت خواهد کرد. همچنین با استفاده از دستور del می‌توان هر ویژگی شی  class در پایتون را حذف کرد که مثال زیر این موضوع را نشان می‌دهد.

<span class="token keyword">print</span><span class="token punctuation">(</span>yellow<span class="token punctuation">.</span>color<span class="token punctuation">)</span>
<span class="token keyword">del</span> yellow<span class="token punctuation">.</span>color
<span class="token keyword">print</span><span class="token punctuation">(</span>yellow<span class="token punctuation">.</span>color<span class="token punctuation">)</span>
yellow
<span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span>
AttributeError                            Traceback <span class="token punctuation">(</span>most recent call last<span class="token punctuation">)</span>
<span class="token operator">~</span>\AppData\Local\Temp<span class="token operator">/</span>ipykernel_3860<span class="token operator">/</span><span class="token number">1130729614.</span>py <span class="token keyword">in</span> <span class="token operator"><</span>module<span class="token operator">></span>
      <span class="token number">1</span> <span class="token keyword">print</span><span class="token punctuation">(</span>yellow<span class="token punctuation">.</span>color<span class="token punctuation">)</span>
      <span class="token number">2</span> <span class="token keyword">del</span> yellow<span class="token punctuation">.</span>color
<span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">-</span><span class="token operator">&</span>gt<span class="token punctuation">;</span> <span class="token number">3</span> <span class="token keyword">print</span><span class="token punctuation">(</span>yellow<span class="token punctuation">.</span>color<span class="token punctuation">)</span>

AttributeError<span class="token punctuation">:</span> <span class="token string">'TrafficLight'</span> <span class="token builtin">object</span> has no attribute <span class="token string">'color'</span>
<span class="token operator"><</span><span class="token operator">/</span>module<span class="token operator">></span>

خروجی به صورت زیر است:

مفهوم کلاس در پایتون

متغیرهای کلاس و شی در پایتون

تفاوت بین متغیرهای کلاس و شی در جایی است که مقادیر آن‌ها در یک تعریف کلاس تخصیص داده شده است که محدوده متغیرها را نیز تعیین می‌کند.

  • متغیرهای کلاس در پایتون: در اعلان کلاس تخصیص داده شده اما خارج از هر تعریف متدی (از جمله سازنده کلاس). آن‌ها به تمام نمونه‌های شی آن کلاس مرتبط هستند.
  • متغیرهای شی: در یک متد کلاس یا تعریف سازنده تخصیص داده می‌شود. آن‌ها برای هر نمونه شی از آن کلاس در پایتون منحصربه‌فرد هستند.
•	<span class="token keyword">class</span> <span class="token class-name">TrafficLight</span><span class="token punctuation">:</span>
•	    <span class="token triple-quoted-string string">'''This is an updated traffic light class'''</span>
•
•	    <span class="token comment"># Class variable</span>
•	    traffic_light_address <span class="token operator">=</span> <span class="token string">'NYC_Cranberry_Hicks'</span>
•
•	    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> color<span class="token punctuation">)</span><span class="token punctuation">:</span>
•
•	        <span class="token comment"># Instance variable assigned inside the class constructor</span>
•	        self<span class="token punctuation">.</span>color <span class="token operator">=</span> color
•
•	    <span class="token keyword">def</span> <span class="token function">action</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
•	        <span class="token keyword">if</span> self<span class="token punctuation">.</span>color<span class="token operator">==</span><span class="token string">'red'</span><span class="token punctuation">:</span>
•
•	            <span class="token comment"># Instance variable assigned inside a class method</span>
•	            self<span class="token punctuation">.</span>next_color <span class="token operator">=</span> <span class="token string">'yellow'</span>
•	            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Stop &amp; wait'</span><span class="token punctuation">)</span>
•	        <span class="token keyword">elif</span> self<span class="token punctuation">.</span>color<span class="token operator">==</span><span class="token string">'yellow'</span><span class="token punctuation">:</span>
•	            self<span class="token punctuation">.</span>next_color <span class="token operator">=</span> <span class="token string">'green'</span>
•	            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Prepare to stop'</span><span class="token punctuation">)</span>
•	        <span class="token keyword">elif</span> self<span class="token punctuation">.</span>color<span class="token operator">==</span><span class="token string">'green'</span><span class="token punctuation">:</span>
•	            self<span class="token punctuation">.</span>next_color <span class="token operator">=</span> <span class="token string">'red'</span>
•	            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Go'</span><span class="token punctuation">)</span>
•	        <span class="token keyword">else</span><span class="token punctuation">:</span>
•	            self<span class="token punctuation">.</span>next_color <span class="token operator">=</span> <span class="token string">'Brandy'</span>
•	            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Stop drinking '</span><span class="token punctuation">)</span>
•
•	<span class="token comment"># Creating class objects</span>
•	<span class="token keyword">for</span> c <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token string">'red'</span><span class="token punctuation">,</span> <span class="token string">'yellow'</span><span class="token punctuation">,</span> <span class="token string">'green'</span><span class="token punctuation">,</span> <span class="token string">'fuchsia'</span><span class="token punctuation">]</span><span class="token punctuation">:</span>
•	    c <span class="token operator">=</span> TrafficLight<span class="token punctuation">(</span>c<span class="token punctuation">)</span>
•	    <span class="token keyword">print</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>traffic_light_address<span class="token punctuation">)</span>
•	    <span class="token keyword">print</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>color<span class="token punctuation">)</span>
•	    c<span class="token punctuation">.</span>action<span class="token punctuation">(</span><span class="token punctuation">)</span>
•	    <span class="token keyword">print</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>next_color<span class="token punctuation">)</span>
•	    <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'\n'</span><span class="token punctuation">)</span>

خروجی مانند تصویر زیر است:

مثالی از کلاس در پایتون

برای تمام نمونه‌های کلاس‌بالا، مقدار یکسانی از متغیر traffic_light_address وجود دارد که یک متغیر Class در پایتون است. متغیر رنگ در سازنده کلاس تخصیص داده شد و متغیر next_color در متد کلاس action() بر اساس مقدار رنگ برای هر نمونه کلاس محاسبه شد. این دو متغیر نمونه هستند.

مطلب پیشنهادی: معرفی و بررسی بهترین ide های پایتون در ٢٠٢٣

نتیجه گیری

به‌طور خلاصه، در این مطلب آموزشی از مکتب خونه ما جنبه‌های بسیاری از ایجاد و استفاده از کلاس‌های پایتون را مورد بحث قرار داده‌ایم که از جمله می‌توان به موارد زیر اشاره داشت:

  • کلاس‌های پایتون چیست و چه زمانی باید از آن‌ها استفاده کرد؟
  • انواع مختلف Class در پایتون
  • رابطه بین اصطلاحات کلاس و نوع برای یک شی پایتون
  • نحوه تعریف کلاس جدید در پایتون
  • قرارداد نام‌گذاری پایتون برای کلاس‌ها
  • ویژگی‌های کلاس چیست و چگونه می‌توان به آن‌ها دسترسی داشت
  • نحوه نمونه‌سازی یک شی کلاس در پایتون
  • ویژگی‌های یک شی کلاس
  • پارامتر self چیست و چگونه کار می‌کند
  • ویژگی‌های سازنده کلاس
  • نحوه دسترسی، ایجاد یا حذف ویژگی‌های شی کلاس
  • تفاوت بین متغیرهای کلاس و نمونه

امیدوارم که این مطلب ما تحت عنوان آموزش Class در زبان پایتون مورد رضایتمندی شما کاربران عزیز قرارگرفته باشد.

یادگیری مفاهیم برنامه نویسی پایتون با مکتب خونه

اگر به فکر یادگیری اصولی برنامه‌نویسی پایتون هستید، بهترین پیشنهاد استفاده از دوره‌های آموزشی است. برای این هدف مکتب خونه طیف گسترده‌ای از فیلم‌های آموزشی پایتون را به صورت رایگان و پولی ارائه کرده است که می‌توانید از آن‌ها استفاده کنید. هم‌اکنون می‌توانید با بازدید از صفحه آموزش پایتون با انواع این دوره‌ها آشنا شوید. در مکتب خونه انواع دوره آموزشی پایتون موجود است.

منابع مورد استفاده در این آموزش:

  • https://www.dataquest.io/blog/using-classes-in-python/
  • https://www.tutorialsteacher.com/python/python-class

کامل بهرامی

کامل بهرامی دانش‌آموخته کارشناسی ارشد رشته مهندسی کامپیوتر گرایش نرم‌افزار از دانشگاه ارومیه است. به تولید محتوا در حوزه کامپیوتر، برنامه‌نویسی و هوش مصنوعی علاقه‌مند‌ است و هم اکنون به عنوان عضو تیم سئو و مدیر تیم نویسنده‌های مکتب خونه در این مجموعه فعالیت می‌کند.

نوشته های مشابه

‫13 دیدگاه ها

  1. سلام توضیح مزخرفی بود
    نویسنده فقط سعی کرده بود اونچه رو که بلده به زبان درستی بیان کنه نه اینکه بخواد انتقالش بده

  2. اقا حالا کاری نداریم از این همه زبون برنامه نویسی چرا فقط پایتون رو گزاشتید؟! خب زبون برنامه نویسی c هم بزارید..

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا