تفاوت 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های کلاس هم از طریق کلاس و هم از طریق نمونهها ممکن است، اما تغییر در آن از طریق نمونه معمولاً فقط آن نمونه را تغییر میدهد (در صورتی که صریحاً به آن مقدار داده شود).
کاربر جدید 5170
14 , فروردین , 1405 - 01:09 قبل از ظهربه نظرم توضیحاتتون عالی هست.
علی بیگدلی
14 , فروردین , 1405 - 08:56 قبل از ظهرلطف دارید