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

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

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

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

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

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

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

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

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

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

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

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

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

a = 5
b = 'Hello World'
c = [1, 2, 3]

for var in [a, b, c]:
    print(type(var)==var.__class__)

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

True

True

True

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

a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range(4)
f = (1, 2, 3)
g = complex(1, -1)

for var in [a, b, c, d, e, f, g]:
    print(var.__class__)

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

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

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

def my_func():
    pass

print(my_func.__class__

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

<class 'function'>
<class 'builtin_function_or_method'>

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

import pandas as pd
import numpy as np

s = pd.Series({'a': 1, 'b': 2})
df = pd.DataFrame(s)
arr = np.array([1, 2, 3])

print(s.__class__)
print(df.__class__)
print(arr.__class__)

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

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>

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

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

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

class MyClass:
pass

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

class MyClass:
'''This is a new class'''
pass

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

class MyClass:
'''This is a new class'''
pass

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

<class ‘type’>

<class ‘type’>

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

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

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

class <classname>:
    <statement1>
    <statement2>
    .
    .
    <statementn>
</statementn></statement2></statement1></classname>

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

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

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

class Student:
pass

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

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

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

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

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

class Student:
schoolName = 'XYZ School'

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

&gt;&gt;&gt; Student.schoolName
'XYZ School'
&gt;&gt;&gt; std = Student()
&gt;&gt;&gt; std.schoolName
'XYZ School'

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

Student.schoolName = 'ABC School' # change attribute value using class name
 std = Student()
 std.schoolName
'ABC School'   # value changed for all instances
 std.schoolName = 'My School'  # changing instance's attribute
 std.schoolName
'My School'
 Student.schoolName # instance level change not reflectd to class attribute
'ABC School'
 std2 = Student()
 std2.schoolName
'ABC School'

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

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

class TrafficLight:
    '''This is a traffic light class'''
    color = 'green'

    def action(self):
        print('Go')

print(TrafficLight.__doc__)
print(TrafficLight.__class__)
print(TrafficLight.color)
print(TrafficLight.action)

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

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

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

سازنده

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

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

class Student:
def __init__(self): # constructor method
    print('Constructor invoked')

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

s1 = Student()
Constructor invoked
s2 = Student()
Constructor invoked

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

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

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

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

class Student:
schoolName = 'XYZ School' # class attribute

def __init__(self): # constructor
    self.name = '' # instance attribute
    self.age = 0 # instance attribute

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

std = Student()
 std.name
''
 std.age
0

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

std = Student()
 std.name = "Bill" # assign value to instance attribute
 std.age=25        # assign value to instance attribute
 std.name          # access instance attribute value
Bill
 std.age           # access value to instance attribute
25

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

class Student:
def __init__(self, name, age):
    self.name = name
    self.age = age

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

std = Student('Bill',25)
 std.name
'Bill'
 std.age
25

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

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

class Student:
def __init__(self, name="Guest", age=25)
    self.name=name
    self.age=age

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

std = Student()
 std.name
'Guest'
 std.age
25

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

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

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

class Student:
def __init__(self):
    self.__name=''
def setname(self, name):
    print('setname() called')
    self.__name=name
def getname(self):
    print('getname() called')
    return self.__name
name=property(getname, setname)

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

std = Student()
 std.name="Steve"
setname() called
 std.name
getname() called
'Steve'

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

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

class Student:
def displayInfo(self): # class method
    print('Student Information')

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

std = Student()
 std.displayInfo()
'Student Information'

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

class Student:
def displayInfo(obj): # class method
    print('Student Information')

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

class Student:
def displayInfo(): # method without self parameter
    print('Student Information')

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

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

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

class Student:
def __init__(self, name, age):
    self.name = name
    self.age = age
def displayInfo(self): # class method
    print('Student Name: ', self.name,', Age: ', self.age)

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

std = Student('Steve', 25)
 std.displayInfo()
Student Name: Steve , Age: 25

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

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

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

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

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

class TrafficLight:
    '''This is a traffic light class'''
    color = 'green'

    def action(self):
        print('Go')

traffic = TrafficLight()

print(traffic.__doc__)
print(traffic.__class__)
print(traffic.color)
print(traffic.action)
print(traffic.action())

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

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

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

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

obj.method(arg1, arg2, ..., argN) ➡️ MyClass.method(obj, arg1, arg2, ..., argN)

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

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

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

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

class TrafficLight:
    '''This is an updated traffic light class'''
    def __init__(self, color):
        self.color = color

    def action(self):
        if self.color=='red':
            print('Stop &amp; wait')
        elif self.color=='yellow':
            print('Prepare to stop')
        elif self.color=='green':
            print('Go')
        else:
            print('Stop drinking ')

yellow = TrafficLight('yellow')
yellow.action()

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

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

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

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

green = TrafficLight('green')
yellow = TrafficLight('yellow')

green.next_color = 'red'

print(green.next_color)
print(yellow.next_color)

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

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

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

print(yellow.color)
del yellow.color
print(yellow.color)
yellow
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_3860/1130729614.py in <module>
      1 print(yellow.color)
      2 del yellow.color
----&gt; 3 print(yellow.color)

AttributeError: 'TrafficLight' object has no attribute 'color'
</module>

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

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

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

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

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

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

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

برای تمام نمونه‌های کلاس‌بالا، مقدار یکسانی از متغیر 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 هم بزارید..

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

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

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