🍎Data Classes

Struct benzeri özelleştirilmiş veri sınıfları

🔰 Nedir?

  • 🗃️ Değişkenleri olan ve diğer dillerdeki struct yapısına benzeyen sınıflardır

  • 🌟 __init__, __repr__ gibi metotları otomatik olarak tanımlanır

  • 💁‍♂️ namedTuple gibidir ama değişkenlere sahip olup, varsayılan değer atamalarını destekler

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float
    z: float = 0.0  # Varsayılan değer atama


p = Point(1.5, 2.5)  # z değeri verilmediği için varsayılan değer atanır

print(p)  # Point(x=1.5, y=2.5, z=0.0)


class C:
    x: int
    y: int = field(repr=False)
    z: int = field(repr=False, default=10)
    t: int = 20

‍🧙‍♂ Detaylı bilgi YEmoji yapısına uygun oluşturulmuş:

bağlantılara bakabilirsin.

🕖 Post-init Yapısı

  • ⏳Değişken tanımlamalarından sonra field(init=false) olarak tanımlanan değişkenler için tekrardan bir init işlemi yapılır

  • 👷‍♂️ __post__init__ metodu ile init işlemi tamamlandıktan sonra, değişkenleri kullanarak yeni değerler üretebilir ve değişkenlere atayabiliriz

@dataclass
class C:
    a: float
    b: float
    c: float = field(init=False)  # __post_init__ içerisinde tanımlanacak

    def __post_init__(self):
        self.c = self.a + self.b

‍🧙‍♂ Detaylı bilgi YEmoji yapısına uygun oluşturulmuş:

bağlantılara bakabilirsin.

🍎 Key - value çifti içeren dict üretme

  • dataclass verilerini dict yapısında oluşturmayı sağlar

  • yaml, json gibi alanlarda çalışırken faydalıdır

from dataclasses import dataclass, asdict

@dataclass
class Point:
     x: int
     y: int

@dataclass
class C:
     mylist: list[Point]

p = Point(10, 20)
assert asdict(p) == {'x': 10, 'y': 20}

c = C([Point(0, 0), Point(10, 4)])
assert asdict(c) == {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk