💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ آصفه اله یاری
زمان استفاده از هر ساختار
محسن موحد حل شده توسط محسن موحد

سلاام امیدوارم این سوالم پاسخ داده بشه 

@staticmethod

@property

@abstractmethod

@classmethod 

از هر یک از ساختارهای بالا چ زمانی استفاده می‌کنیم 

سلام،
1. @staticmethod:

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

class MyClass:
   @staticmethod
   def my_static_method(x, y):
       return x + y
# بدون نیاز به ایجاد نمونه از کلاس می‌توان از تابع استفاده کرد
MyClass.my_static_method(1, 2)


 

2. @property:

از این decorater برای تبدیل یک تابع به یک property استفاده می‌شود.
propertyها مانند ویژگی‌های کلاس عمل می‌کنند، اما می‌توانند منطق پیچیده‌تری برای محاسبه مقدار خود داشته باشند.
مثال:

class MyClass:
   def __init__(self, name):
       self._name = name
   @property
   def name(self):
       return self._name
   @name.setter
   def name(self, value):
       self._name = value
my_instance = MyClass("John")
# می‌توان از property مانند یک ویژگی ساده استفاده کرد
print(my_instance.name)  # John
my_instance.name = "Mary"
print(my_instance.name)  # Mary


3. @abstractmethod:

از این decorater برای تعریف یک متد انتزاعی در یک کلاس پایه استفاده می‌شود.
متدهای انتزاعی بدنه‌ای ندارند و باید در کلاس‌های مشتق شده پیاده‌سازی شوند.
مثال:

from abc import ABC, abstractmethod
class Animal(ABC):
   @abstractmethod
   def speak(self):
       pass
class Dog(Animal):
   def speak(self):
       print("Woof!")
class Cat(Animal):
   def speak(self):
       print("Meow!")
# ایجاد نمونه از کلاس پایه غیرممکن است
# animal = Animal()
dog = Dog()
dog.speak()  # Woof!
cat = Cat()
cat.speak()  # Meow!


4. @classmethod:

از این decorater برای تعریف یک متد کلاس استفاده می‌شود.
متدهای کلاس به طور مستقیم روی کلاس و نه روی نمونه‌های آن اجرا می‌شوند.
از این decorater برای متدهایی که به ویژگی‌های کلاس یا ایجاد نمونه‌های جدید از کلاس نیاز دارند استفاده می‌شود.
مثال:

class MyClass:
   @classmethod
   def create_instance(cls, name):
       return cls(name)
my_instance = MyClass.create_instance("John")
print(my_instance.name)  # John

 

بهترین پاسخ
محسن موحد ۱۱ اسفند ۱۴۰۲، ۲۳:۲۲