از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش استفاده از برنامه نویسی شی گرا در پایتون – با مثال توضیح داده شده است
سرفصلهای مطلب
برنامه نویسی شی گرا (OOP) سبکی از برنامه نویسی است که به شدت متکی است روی اشیاء. این اشیا می توانند ویژگی ها و متدهایی داشته باشند. در حالی که ویژگی ها داده ها را ذخیره می کنند، روش ها رفتار را تعریف می کنند.
مانند بسیاری از زبان های برنامه نویسی دیگر، پایتون هم از برنامه نویسی OOP و هم از برنامه نویسی تابعی پشتیبانی می کند. با این حال، OOP هنگام نوشتن برنامه های بزرگ و پیچیده ارزشمند می شود.
در این مقاله با مزایای OOP در پایتون، روش تعریف کلاس، ویژگی های کلاس و نمونه و متدهای نمونه آشنا خواهید شد. همچنین با مفهوم کپسوله سازی و روش پیاده سازی وراثت بین کلاس ها در پایتون آشنا خواهید شد.
برای درک کامل این مقاله، باید پیش نیازهای زیر را داشته باشید:
- دانش اولیه زبان برنامه نویسی پایتون.
- آشنایی با مفاهیم توابع و اشیا در برنامه نویسی.
- تجربه کار با ویرایشگر کد یا محیط توسعه یکپارچه (IDE).
- درک اولیه روش استفاده از a command-line terminal یا console.
حالا بیایید شیرجه بزنیم.
چرا از برنامه نویسی شی گرا استفاده کنیم؟
برنامه نویسی شی گرا (OOP) مزایای متعددی را هنگام سازماندهی و مدیریت کد ارائه می دهد. با گروهبندی دادهها و توابع مرتبط در کلاسهای منطقی، OOP ساختار کد را ارتقا میدهد و تعمیر و نگهداری را ساده میکند، بهویژه زمانی که برنامهها در اندازه و پیچیدگی رشد میکنند. رویکرد ماژولار درک، اصلاح و استفاده مجدد از کد را آسانتر میکند و در نتیجه زمان توسعه را کاهش میدهد.
یکی دیگر از مزایای OOP توانایی آن در ارائه یک سبک برنامه نویسی واضح و مرتبط است که می تواند برای توسعه دهندگان مفیدتر باشد. استفاده از اشیا و روابط بین آنها مفاهیم دنیای واقعی را منعکس می کند. این امر استدلال در مورد کد و طراحی سیستم های پیچیده را آسان تر می کند.
در نهایت، مفاهیم OOP مانند کپسولهسازی و وراثت، با ترویج حفاظت از دادهها و قابلیت استفاده مجدد کد، به استحکام کد کمک میکنند.
کلاس در پایتون چیست؟
OOP در پایتون به شدت متکی است روی مفهومی از class
. شما می توانید یک کلاس را به عنوان یک طرح اولیه در نظر بگیرید که برای ایجاد اشیا استفاده می شود. برای نشان دادن این موضوع، تصور کنید که طرحی برای یک بلندگو دارید. شما می توانید از این طرح برای ساخت چندین بلندگو استفاده کنید. هر بلندگوی که با استفاده از طرح اولیه ایجاد می شود، نمونه ای از طرح اولیه است. همچنین هر بلندگوی ایجاد شده دارای ویژگی هایی مانند رنگ، مدل و نام است. آنها همچنین روش های خود را نشان می دهند که نوع خاصی از رفتار مانند افزایش صدا و کاهش صدا را نشان می دهد.
روش تعریف کلاس در پایتون
برای تعریف یک کلاس، باید از آن استفاده کنید class
کلمه کلیدی که توسط پایتون ارائه می شود، سپس نام کلاس و یک کولون به دنبال آن آمده است:
class ClassName:
pass
اکنون با استفاده از تصویر قبلی خود، بیایید کلاسی به نام ایجاد کنیم Speaker
. در ویرایشگر کد خود، یک فایل به نام ایجاد کنید classes.py
و خطوط کد زیر را در آن کپی کنید:
class Speaker:
pass
speaker_one = Speaker()
print(speaker_one)
در کد قبلی، کلاسی به نام تعریف کردید Speaker
بدون هیچ ویژگی یا روش شما از کلمه کلیدی استفاده کردید pass
در بدنه کلاس در پایتون، pass
کلمه کلیدی هیچ کاری انجام نمی دهد و معمولاً به عنوان مکان نگهدارنده استفاده می شود.
در خط چهار کد، یک نمونه از کد ایجاد کردید Speaker
کلاس و آن را به متغیر اختصاص داد speaker_one
. این process همچنین به عنوان نمونه سازی یک شی از یک کلاس شناخته می شود. بعد چاپ کردی speaker_one
در خط پنج
حالا با اجرای دستور کد را اجرا کنید python classes.py
در شما terminal. خروجی مشابه این را در خود دریافت خواهید کرد terminal:
<__main__.Speaker object at 0x10087f8e0>
خروجی این را نشان می دهد speaker_one
یک شی است. 0x10087f8e0
در خروجی آدرس حافظه را نشان می دهد که پایتون شی را در آن ذخیره می کند روی کامپیوتر شما.
آدرس حافظه موجود در شما terminal خروجی متفاوت خواهد بود.
شما می توانید چندین نمونه دیگر از آن ایجاد کنید Speaker
کلاس و همه آنها با یکدیگر متفاوت خواهند بود. برای تأیید این موضوع، از مقایسه برابری (==) اپراتور. در شما classes.py
فایل، حذف print(speaker_one)
و موارد زیر را به پایین کد خود اضافه کنید:
speaker_two = Speaker()
if speaker_one == speaker_two:
print("speaker one is the same as speaker two")
else:
print("speaker one is different from speaker two")
حالا اجرا کن python classes.py
در شما terminal. خروجی زیر را دریافت خواهید کرد:
speaker one is different from speaker two
صفات کلاس و نمونه
در این بخش، ویژگی هایی را به خود اضافه می کنید Speaker
کلاس شما می توانید ویژگی ها را به عنوان داده های ذخیره شده در یک شی ببینید. در حالی که ویژگی های کلاس برای همه نمونه های ایجاد شده از کلاس شما مشترک است، ویژگی های نمونه برای هر نمونه منحصر به فرد هستند.
حال خود را اصلاح کنید classes.py
کد خود را با کد زیر جایگزین کنید:
class Speaker:
brand = "Beatpill" # class attribute
def __init__(self, color, model):
self.color = color # instance attribute
self.model = model # instance attribute
شما باید قبلاً با خط یک کد جدید خود آشنا باشید. در خط دو، یک ویژگی کلاس را با نام تعریف کردید brand
، و مقدار را به آن اختصاص داد Beatpill
. ویژگیهای کلاس، متغیرهایی هستند که به خود کلاس تعلق دارند، نه به نمونههای جداگانه کلاس. تأثیر ویژگیهای کلاس این است که تمام نمونههایی که از کلاس خود ایجاد میکنید، ویژگی کلاس و مقدار آن را به ارث میبرند و به اشتراک میگذارند. در این مورد، هر نمونه ای که از خود ایجاد می کنید Speaker
کلاس همان را به اشتراک خواهد گذاشت brand
ارزش.
خط چهار کد شما یک را تعریف می کند __init__
روشی که دارای سه پارامتر استself
، color
، و model
. هر زمان که یک نمونه جدید از خود ایجاد کنید، این متد فراخوانی می شود Speaker
کلاس این self
پارامتر مرجعی است به Speaker
کلاس و این یک قرارداد در پایتون است که همیشه آن را به عنوان اولین پارامتر در a داشته باشیم __init__
روش. صفات نمونه مجموعه خط پنج و شش، color
، و model
به شما Speaker
کلاس
بنابراین، هر بار که یک نمونه جدید از کلاس خود ایجاد می کنید، باید آرگومان هایی برای خود ارائه دهید color
و model
ویژگی های. عدم انجام این کار منجر به خطا می شود.
حالا موارد زیر را به پایین کد خود اضافه کنید:
speaker_one = Speaker("black", "85XB5")
speaker_two = Speaker("red", "Y8F33")
print(f"speaker one is {speaker_one.color} while speaker two is {speaker_two.color}")
با افزودن کد قبلی، دو نمونه از آن را ایجاد کردید Speaker
کلاس –speaker_one
و speaker_two
. آرگومان ها در هر نمونه نشان دهنده مقادیر آنها هستند color
و model
ویژگی های. سپس پیامی را چاپ کردید که ویژگی رنگ هر شی را نشان می دهد. حالا اگر دستور را اجرا کنید python classes.py
در شما terminal، خروجی را دریافت خواهید کرد:
speaker one is black while speaker two is red
برای مشاهده اینکه هر دو نمونه یکسان هستند brand
ویژگی کلاس، خود را تغییر دهید print()
عملکرد مانند این:
print(
f"speaker one is {speaker_one.color} while speaker two is {speaker_two.color}",
speaker_one.brand,
speaker_two.brand,
sep="\n",
)
حالا اجرا کن python classes.py
و خروجی زیر را دریافت خواهید کرد:
speaker one is black and speaker two is red
Beatpill
Beatpill
روش های نمونه
علاوه بر ویژگی های کلاس و نمونه، کلاس ها می توانند متدهایی نیز داشته باشند که به روش های نمونه معروف هستند. متدهای نمونه توابعی هستند که در یک کلاس تعریف شده اند که عمل می کنند روی نمونه های کلاس آنها از ویژگی های کلاس و نمونه برای ارائه رفتار و عملکرد به اشیا استفاده می کنند.
برای افزودن متدهای نمونه، فایل کد خود را به صورت زیر تغییر دهید:
class Speaker:
brand = "Beatpill"
def __init__(self, color, model):
self.color = color
self.model = model
def power_on(self):
print(f"Powering روی {self.color} {self.model} speaker.")
def power_off(self):
print(f"Powering off {self.color} {self.model} speaker.")
speaker_one = Speaker("black", "85XB5")
speaker_two = Speaker("red", "Y8F33")
در مثال بالا، ما دو روش نمونه اضافه کردهایم.power_on()
و power_off()
. این روش ها، درست مانند __init__
روش، گرفتن self
به عنوان اولین استدلال
این power_on()
متد پیامی را چاپ می کند که نشان می دهد بلندگوی رنگ و مدل داده شده در حال روشن شدن است روی. به طور مشابه، power_off()
متد پیامی در مورد خاموش کردن بلندگو چاپ می کند.
برای فراخوانی این متدها، موارد زیر را به پایین فایل خود اضافه کنید:
speaker_one.power_on()
speaker_two.power_off()
حالا اجرا کن python classes.py
در شما terminal و خروجی زیر را دریافت خواهید کرد:
Powering روی black 85XB5 speaker.
Powering off red Y8F33 speaker.
کپسوله سازی در پایتون
کپسولاسیون یکی از مفاهیم اصلی OOP است. به مجموعه داده ها (ویژگی ها) و روش ها در یک کلاس اشاره دارد. کپسوله سازی محافظت از داده ها و کنترل روش تعامل کد با وضعیت داخلی یک شی را فراهم می کند.
شما می توانید با تعریف ویژگی ها و متدهای خصوصی در یک کلاس به کپسوله سازی در پایتون برسید. طبق قرارداد، ویژگی ها و روش های خصوصی با یک زیرخط (_) پیشوند می شوند. در حالی که پایتون مانند برخی از زبانهای دیگر دارای اصلاحکنندههای خصوصی سختگیرانه نیست، پیشوند زیر خط به عنوان هشداری برای توسعهدهندگان دیگر عمل میکند تا به ویژگیها و متدها مستقیماً از خارج کلاس دسترسی نداشته باشند یا آنها را تغییر ندهند.
در اینجا نمونه ای از کپسوله سازی در پایتون آورده شده است:
class Speaker:
brand = "Beatpill"
def __init__(self, color, model):
self._color = color # Private attribute
self._model = model # Private attribute
def power_on(self):
print(f"Powering روی {self._color} {self._model} speaker.")
def power_off(self):
print(f"Powering off {self._color} {self._model} speaker.")
def get_color(self):
return self._color
def set_color(self, new_color):
self._color = new_color
speaker_one = Speaker("black", "85XB5")
speaker_one.power_on()
# Accessing a private attribute directly (not recommended)
print(speaker_one._color)
# Accessing a private attribute using the getter method (recommended)
print(speaker_one.get_color())
# Modifying a private attribute using the setter method (recommended)
speaker_one.set_color("white")
print(speaker_one.get_color())
در مثال قبل، color
و model
ویژگی ها ویژگی های خصوصی هستند Speaker
کلاس اگر چه می توان مستقیماً از خارج از کلاس به این ویژگی ها دسترسی پیدا کرد و با استفاده از آن، برای مثال، print(speaker_one._color)
، این عمل منع شده است. انجام این کار کپسوله سازی را نقض می کند و می تواند منجر به رفتار ناخواسته یا تخریب داده شود.
در عوض، کلاس دریافت کننده را فراهم می کند get_color()
و تنظیم کننده set_color()
روش هایی برای دسترسی و اصلاح ویژگی های خصوصی به شیوه ای کنترل شده. این روشها بهعنوان رابطی برای تعامل با وضعیت داخلی شی عمل میکنند، از یکپارچگی دادهها اطمینان میدهند و اعتبارسنجی اضافی را امکانپذیر میکنند.
کپسوله سازی ماژولار بودن کد، قابلیت نگهداری و حفاظت از داده ها را با جداسازی حالت داخلی از رابط عمومی (روش ها) ارتقا می دهد. این به شما امکان می دهد تا زمانی که رابط عمومی یکسان است، بدون تأثیر بر کدی که از کلاس استفاده می کند، وضعیت داخلی را تغییر دهید.
وراثت در پایتون
وراثت یکی دیگر از مفاهیم اصلی OOP است. به کلاس ها اجازه می دهد تا ویژگی ها و متدها را از کلاس های دیگر به ارث ببرند. کلاس جدید ویژگی ها و متدهایی را از کلاس موجود به ارث می برد که به عنوان کلاس والد یا پایه شناخته می شود. کلاس جدید را کلاس فرزند یا مشتق می گویند.
وراثت با اجازه دادن به کلاس فرزند برای ارث بردن و گسترش عملکرد کلاس والد، استفاده مجدد از کد را ترویج می کند. این به ایجاد روابط سلسله مراتبی بین کلاس ها و سازماندهی کد به شیوه ای ساختارمندتر و منطقی کمک می کند.
در پایتون، وراثت با استفاده از سینتکس زیر پیاده سازی می شود:
class DerivedClass(BaseClass):
# Derived class methods and attributes
برای مشاهده روش عملکرد وراثت، کد خود را به صورت زیر تغییر دهید:
class Speaker:
brand = "Beatpill"
def __init__(self, color, model):
self._color = color
self._model = model
def power_on(self):
print(f"Powering روی {self._color} {self._model} speaker.")
def power_off(self):
print(f"Powering off {self._color} {self._model} speaker.")
# Add a SmartSpeaker class and make it inherit from the Speaker class
class SmartSpeaker(Speaker):
def __init__(self, color, model, voice_assistant):
super().__init__(color, model)
self._voice_assistant = voice_assistant
def say_hello(self):
print(f"Hello, I am {self._voice_assistant}")
# Create an instance of the SmartSpeaker class
smart_speaker = SmartSpeaker("black", "XYZ123", "Alexa")
smart_speaker.power_on() # Inherited from Speaker
smart_speaker.say_hello()
در کد قبلی، SmartSpeaker
کلاس از Speaker
کلاس این SmartSpeaker
کلاس صفات و متدهای the را به ارث می برد Speaker
کلاس
این __init__
روش از SmartSpeaker
کلاس تماس می گیرد __init__
روش از Speaker
کلاس با استفاده از super().__init__(color, model)
. این تضمین می کند که ارثی _color
و _model
ویژگی ها به درستی مقداردهی اولیه شده اند. همچنین SmartSpeaker
کلاس ویژگی خاص خود را دارد _voice_assistant
، و یک روش جدید say_hello
.
حالا اجرا کن python classes.py
در شما terminal و خروجی زیر را دریافت خواهید کرد:
Powering روی black XYZ123 speaker.
Hello, I am Alexa
نتیجه
در طول این مقاله، مزایای برنامه نویسی شی گرا (OOP) را برجسته کردیم و روش تعریف کلاس ها، ایجاد و استفاده از ویژگی ها و متدهای نمونه را نشان دادیم. ما مثالهای عملی برای نشان دادن اجرای کلاسها در پایتون و همچنین مفاهیم کلیدی OOP مانند کپسولهسازی و وراثت ارائه کردیم.
استفاده از درس های ارائه شده در این مقاله به شما کمک می کند تا تجربه برنامه نویسی پایتون خود را بهبود بخشیده و کارایی و قابلیت نگهداری کد خود را افزایش دهید.
مراجع و مطالعه بیشتر
- https://en.wikipedia.org/wiki/Object-oriented_programming
- https://realpython.com/python3-object-oriented-programming/
- https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_programming
- https://docs.python.org/3/tutorial/classes.html
- https://realpython.com/python-کلاس ها/
- https://realpython.com/python-دو خط زیر/
منتشر شده در 1403-04-24 20:25:05