| کانال توسعه‌دهندگان پایتون |
6.6K subscribers
41 photos
2 videos
4 files
46 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
🔶 بخش اول
🔶 مفاهیم شی‌گرائی

🔻 اصول SOLID
اصول SOLID پنج قاعده مهم در طراحی و توسعه نرم‌افزار هستند که به نوشتن کدی تمیز، انعطاف‌پذیر و قابل نگهداری کمک می‌کنند. این اصول ابتدا توسط Robert C. Martin (عمو باب) مطرح، و برای کاهش وابستگی‌ها و افزایش قابلیت گسترش کد طراحی شده‌اند.


🔻 اصل‌ تک مسئولیتی (SRP)
براساس اصل Single Responsibility Principle، هر کلاس باید فقط یک مسئولیت داشته باشد و تنها یک دلیل برای تغییر آن وجود داشته باشد. برای مثال، یک کلاس نباید هم وظیفه مدیریت کاربران و هم ارسال ایمیل را برعهده داشته باشد.


✖️ مشکل: کلاس زیر هم وظیفه مدیریت کاربر و هم ارسال ایمیل ایمیل را برعهده دارد:
class UserManager:
def register_user(self, user_data):
pass

def send_email(self, email):
pass


✔️ راه‌حل: تفکیک وظايف:
class UserManager:
def register_user(self, user_data):
pass

class EmailService:
def send_email(self, email):
pass



🔻 اصل باز/بسته (OCP)
براساس اصل Open/Closed Principle، کلاس‌ها باید برای گسترش باز و برای تغییر بسته باشند. برای مثال، اگر نیاز به اضافه کردن نوع جدیدی از گزارش دارید، به جای تغییر کلاس اصلی، از وراثت یا پلی‌مورفیسم استفاده کنید.


✖️ مشکل: کلاس زیر مسئول چندین نوع پرداخت است:
class PaymentProcessor:
def process_payment(self, payment_type):
if payment_type == "CreditCard":
pass
elif payment_type == "PayPal":
pass


✔️ راه‌حل: جداسازی روش‌های پرداخت:
from abc import ABC, abstractmethod

class Payment(ABC):
@abstractmethod
def process(self):
pass

class CreditCardPayment(Payment):
def process(self):
pass

class PayPalPayment(Payment):
def process(self):
pass



🔻 اصل جایگزینی لیسکوف (LSP)
براساس اصل Liskov Substitution Principle، زیرکلاس‌ها باید بتوانند بدون تغییر رفتار برنامه، جایگزین کلاس‌های پدر شوند. برای مثال، یک مربع (Square) نباید به‌عنوان زیرکلاس یک مستطیل (Rectangle) تعریف شود، اگر رفتارهای مستطیل را نقض کند.


✖️ مشکل: فرض کنید کلاسی به نام Bird داریم که برای پرنده‌ها طراحی شده است و دو زیرکلاس داریم: Sparrow (گنجشک) و Penguin (پنگوئن). در این مثال، متد fly() برای پنگوئن اشتباه است، زیرا پنگوئن نمی‌تواند پرواز کند.
class Bird:
def fly(self):
pass

class Sparrow(Bird):
def fly(self):
pass

class Penguin(Bird):
def fly(self):
return NotImplemented

sparrow = Sparrow()
sparrow.fly() # Output: is ok

penguin = Penguin()
penguin.fly() # Output: Not Implemented


✔️ راه‌حل: تفکیک رفتارها
class Bird:
def lay_eggs(self):
pass

class FlyingBird(Bird):
def fly(self):
pass

class Sparrow(FlyingBird):
...

class Penguin(Bird):
def swim(self):
pass



🔻 اصل جداسازی اینترفیس (ISP)
براساس اصل Interface Segregation Principle، کلاس‌ها نباید مجبور شوند متدهایی را پیاده‌سازی کنند که به آن‌ها نیازی ندارند. برای مثال، اگر یک اینترفیس شامل متدهای کار و غذا خوردن باشد، یک ربات که نمی‌تواند غذا بخورد، نباید مجبور به پیاده‌سازی متد غذا خوردن شود.


✖️ مشکل: کلاس Printer مجبور است متد scan را پیاده‌سازی کند، حتی اگر این عملیات مورد نیاز نباشد.
class Machine:
def print(self):
pass

def scan(self):
pass

class Printer(Machine):
def print(self):
pass

def scan(self):
raise NotImplemented


✔️ راه‌حل: در اینجا رابط‌ها جدا می‌شوند تا هر کلاس فقط متدهای مورد نیاز خود را پیاده‌سازی کند:
class Printer:
def print(self):
pass

class Scanner:
def scan(self):
pass

class PrinterDevice(Printer):
def print(self):
print("Printing...")

class SimpleScanner(Scanner):
def scan(self):
print("Scanning...")



🔻 اصل وارونگی وابستگی (DIP)
براساس اصل Dependency Inversion Principle، ماژول‌های سطح بالا نباید به ماژول‌های سطح پایین وابسته باشند. هر دو باید به انتزاعات وابسته باشند. برای مثال، یک کلاس نباید مستقیماً به دیتابیس خاصی وابسته باشد. به جای آن باید از اینترفیس یا انتزاعی برای ارتباط استفاده کند.


🔖 #Python, #پایتون, #شئ‌گرایی, #OOP, #SOLID

👤 ȺʍìɾⱮօհąʍʍąժ

💎 Channel: @DevelopixPython
👍15🔥41
| کانال توسعه‌دهندگان پایتون |
🔹 انواع ارور ها در پایتون 🔸 بخش اول برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست. — SyntaxError یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق می‌افتد که شما نگارش و قانون نوشتاری…
🔹 انواع ارور ها در پایتون
🔸 بخش دوم

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

FileNotFoundError

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

مثال:
with open("test.txt", "r") as t:
t.read()

FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'



ModuleNotFoundError

هنگامی که پایتون نتواند کتابخانه موردنظر را پیدا کند این خطا را برمی‌گرداند.
اگر کتابخانه مورد نظر روی سیستم یا محیط مجازی نصب نباشد و یا غلط املایی در نوشتن نام کتابخانه داشته باشید با این ارور مواجه خواهید شد.

مثال:
import requests

ModuleNotFoundError: No module named 'requests'



IndexError

مطمعناً تابه‌حال وقتی خواستید به یک عنصر قابل شمارش ها دسترسی پیدا کنید به این ارور برخورد کرده‌اید.
اما دلیل رخ دادن این ارور چیست؟ زمانی این ارور رخ میدهد که اندیس مورد نظری که شما میخواهید آن را بگیرید در لیست یا رشته وجود نداشته باشد.
مانند زمانی که یک لیست 3 آیتم دارد اما شما در پی آیتم چهارم هستید.
مثال:
names = ["Yasin", "Reza", "Navid"]
print(names[5])

IndexError: list index out of range



KeyError

خطای key error خطایی رایج هست که احتمالا موقع کار با دیکشنری ها با اون برخورد کردید.
اگر تلاش کنید به یک مقدار توسط کلمه کلیدی آن دسترسی پیدا کنید اما آن کلمه‌کلیدی وجود نداشته باشد این خطا بروز داده می‌شود.
مثال:
names = {'Yasin': '1', 'Reza': '2'}
print(names['3'])

KeyError: '3'



AttributeError

اگر تلاش کنید به یک متد یا صفت (attribute) از شئ دسترسی پیدا کنید اما شئ مورد نظر صفتی که میخواهید را نداشته باشد با این خطا مواجه خواهید شد.
مثال:
numbers = [1, 2, 3]
print(numbers.sum())

AttributeError: 'list' object has no attribute 'sum'


منبع:
betterstack 〽️

🔖 #Python, #پایتون

👤 Yasin

💎 Channel: @DevelopixPython
👍64👎1