0
سبد خرید من 0 دوره
سبد خرید شما خالیست :(
پرسش

تفاوت و نحوه استفاده از متغیرها و متدهای استاتیک کلاس

Class static variables and methods

یه سوال دارم در مورد متغیرهای استاتیک و متدهای استاتیک در کلاس‌ها. می‌خواستم بدونم تفاوت این دو تا چیه و چه زمانی باید ازشون استفاده کنم؟ مثلاً وقتی یه متغیر رو استاتیک تعریف می‌کنیم، دقیقاً چه تاثیری داره؟ یا اینکه وقتی یه متد استاتیک تعریف می‌کنیم، چطور باید بهش دسترسی پیدا کنیم؟

1403/06/01
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

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

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

یه مثال ساده برای این قضیه:

class MyClass:
    static_variable = 0  # This is a static variable
    def __init__(self):
        MyClass.static_variable += 1
    @staticmethod
    def static_method():
        print("This is a static method.")
# Using static variable
print(MyClass.static_variable)  # Outputs: 0
obj1 = MyClass()
obj2 = MyClass()
print(MyClass.static_variable)  # Outputs: 2
# Using static method
MyClass.static_method()  # Outputs: This is a static method.

توی این مثال، static_variable یه متغیر استاتیکه که هر بار که یه شیء جدید از کلاس ساخته می‌شه، مقدارش افزایش پیدا می‌کنه. به همین دلیل وقتی دو تا شیء obj1 و obj2 رو می‌سازیم، مقدار static_variable می‌شه

همچنین، static_method یه متد استاتیکه که مستقیماً از طریق کلاس قابل دسترسه و نیازی به ساختن شیء نداره.

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

پاسخ: 1403/06/01
آخرین آپدیت: 1403/07/23