class attribute vs object attributes

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/12
  • تعداد بازدید: 26

تفاوت Attributeهای کلاس و Attributeهای یک شیء (Object)

در پایتون، هر کلاس و هر شیء (نمونه کلاس) می‌تواند ویژگی‌ها (attributes) داشته باشد. اما این ویژگی‌ها در دو سطح مختلف تعریف می‌شوند:

1. Attributeهای کلاس (Class Attributes)

ویژگی‌هایی هستند که مستقیماً در کلاس تعریف می‌شوند و بین تمام نمونه‌های آن کلاس مشترک هستند. این ویژگی‌ها به همه اشیاء تعلق دارند و تغییر آن در یک جا، روی همه اشیاء تاثیر می‌گذارد.

class Dog:
    species = "Canis familiaris"  # Class attribute

    def __init__(self, name):
        self.name = name  # Object attribute

dog1 = Dog("Fido")
dog2 = Dog("Buddy")

print(dog1.species)  # Canis familiaris
print(dog2.species)  # Canis familiaris

Dog.species = "Modified species"

print(dog1.species)  # Modified species
print(dog2.species)  # Modified species
2. Attributeهای شیء (Object Attributes)

این ویژگی‌ها مختص هر شیء هستند و در متد __init__ یا به صورت جداگانه به هر شیء اختصاص داده می‌شوند. تغییر در ویژگی یک شیء، روی اشیاء دیگر تاثیری ندارد.

dog1.name = "Fido"
dog2.name = "Buddy"

print(dog1.name)  # Fido
print(dog2.name)  # Buddy

dog1.name = "Max"
print(dog1.name)  # Max
print(dog2.name)  # Buddy
خلاصه تفاوت‌ها:
  • Attributeهای کلاس برای همه نمونه‌ها یکسان است و در سطح کلاس تعریف می‌شود.
  • Attributeهای شیء مخصوص همان نمونه است و می‌تواند برای هر شیء مقدار متفاوتی داشته باشد.
  • دسترسی به Attributeهای کلاس هم از طریق کلاس و هم از طریق نمونه‌ها ممکن است، اما تغییر در آن از طریق نمونه معمولاً فقط آن نمونه را تغییر می‌دهد (در صورتی که صریحاً به آن مقدار داده شود).

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.