Sobes.tech
Middle

Dataclasses və namedtuple arasında oxşarlıqlar və fərqlər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

dataclassesnamedtuple sadə məlumat strukturlarını yaratmaq üçün istifadə olunur, burada əsas məqsəd məlumatları saxlamaq və onlara adla müraciət etməkdir.

Oxşarlıqlar:

  • Aydın şəkildə müəyyən edilmiş sahələrə malik sinflər yaratmağa imkan verir.
  • Sahələrə adla giriş təmin edir (məsələn, obj.field).
  • Avtomatik olaraq __repr__ metodlarını yaradır (istifadəçi dostu sətir təqdimatı üçün).
  • Unpacking (ayrıştırma) dəstəkləyir.

Fərqlər:

Fərq collections.namedtuple dataclasses.dataclass
Dəyişkənlik Dəyişməz tip (immutable) Standart olaraq dəyişkəndir, frozen=True ilə dəyişməz edilə bilər
Tip qeydiyyatı Opsiyonaldır, tip annotasiyalarına əsaslanır Zorunludur, tip annotasiyalarına əsaslanır
Miras Tuple-ə əsaslanır, genişləndirmək çətindir Tam sinflər, miras dəstəklənir
Funksionallıq Yalnız məlumatların saxlanması, sadə repr Daha çox imkanlar: __init__, __eq__, __hash__, __order__, standart dəyərlər olan sahələr, post-emal (__post_init__)
Python versiyası Python 2 və 3-də mövcuddur Python 3.7 və yuxarıda mövcuddur
Sintaksis Sinfi qaytaran funksiya @dataclass dekoratoru

Nümunələr:

# namedtuple
from collections import namedtuple

PointNT = namedtuple('PointNT', ['x', 'y'])
p1 = PointNT(1, 2)
# p1.x = 10 # Xətaya səbəb olur, çünki dəyişməzdir

print(p1)
# dataclass
from dataclasses import dataclass, field

@dataclass
class PointDC:
    x: int
    y: int = 0 # Standart dəyər
    z: int = field(init=False) # Avtomatik başlatılmayan sahə

    def __post_init__(self):
        self.z = self.x + self.y

p2 = PointDC(1)
print(p2)

p2.y = 5 # Dəyişkən
print(p2)

# Dəyişməz dataclass üçün
@dataclass(frozen=True)
class ImmutablePoint:
    x: int
    y: int

p3 = ImmutablePoint(3, 4)
# p3.x = 10 # Xətaya səbəb olur
print(p3)