தொகுதி பாடங்கள் (2/4)
தரவு வகுப்பு: கொதிகலன் இல்லாத தரவு வகுப்புகள்
@dataclass அலங்கரிப்பான் (dataclasses தொகுதி) தானாகவே உருவாக்குகிறது
__init__, __repr__, மற்றும் __eq__ வகுப்புகளுக்கு பிடிப்பது மட்டுமே வேலை
தரவு. குறைந்த கொதிகலன், தெளிவான குறியீடு.
தரவு வகுப்பு இல்லாமல் (பாய்லர் பிளேட்)
class Punto:
def __init__(self, x: float, y: float) -> None:
self.x = x
self.y = y
def __repr__(self) -> str:
return f"Punto(x={self.x}, y={self.y})"
def __eq__(self, other) -> bool:
if not isinstance(other, Punto):
return NotImplemented
return (self.x, self.y) == (other.x, other.y)தரவு வகுப்புடன்
from dataclasses import dataclass
@dataclass
class Punto:
x: float
y: float
p = Punto(3, 4)
p # Punto(x=3, y=4) ← __repr__ gratis
Punto(3, 4) == Punto(3, 4) # True ← __eq__ gratis
p.x, p.y # 3, 4முறை: புலங்களை வகுப்பு சிறுகுறிப்புகளாக அறிவிக்கவும் (name: type),
விருப்பமாக ஒரு இயல்புநிலை மதிப்புடன். @dataclass மீதமுள்ளவற்றை உருவாக்குகிறது.
இயல்புநிலை மற்றும் default_factory
from dataclasses import dataclass, field
@dataclass
class Articolo:
nome: str
prezzo: float = 0.0
tag: list[str] = field(default_factory=list)உறைந்த=உண்மை: மாறாத
@dataclass(frozen=True)
class Coordinata:
lat: float
lon: float
c = Coordinata(45.4, 9.2)
c.lat = 99 # FrozenInstanceError!frozen தரவு வகுப்புகளும் ஹேஷபிள்: நீங்கள் அவற்றை டிக் கீகளாகப் பயன்படுத்தலாம்
அல்லது கூறுகளை அமைக்கவும்.
ஒழுங்கு=உண்மை: தானியங்கி ஒப்பீடுகள்
@dataclass(order=True)
class Voto:
valore: int
Voto(10) < Voto(20) # True
sorted([Voto(30), Voto(10), Voto(20)])__lt__, __le__, __gt__, __ge__ வரிசையில் உள்ள புலங்களை உருவாக்குகிறது
அவை அறிவிக்கப்பட்டன.
சாதாரண முறைகள்
தரவு வகுப்புகள் வழக்கமான வகுப்புகளாகவே இருக்கும்: நீங்கள் முறைகளைச் சேர்க்கலாம்.
import math
from dataclasses import dataclass
@dataclass
class Punto:
x: float
y: float
def distanza_dall_origine(self) -> float:
return math.hypot(self.x, self.y)
Punto(3, 4).distanza_dall_origine() # 5.0மாறாத மற்றும் திறமையான தரவு வகுப்புகள்
frozen=True என்ற வாதத்தை அலங்கரிப்பவருக்கு அனுப்புவதன் மூலம், நீங்கள் டேட்டாக்ளாஸை மாற்ற முடியாததாக மாற்றலாம்: @dataclass(frozen=True). இது உடனடிச் சூழலுக்குப் பிறகு பண்புகளை மாற்றுவதற்கான எந்தவொரு முயற்சியிலும் பிழையை எழுப்புகிறது.
நீங்களே முயற்சி செய்து பாருங்கள்
`தலைப்பு: str` மற்றும் `pages: int` புலங்களுடன் `புத்தகம்` என்ற தரவு வகுப்பை உருவாக்கவும். உடனடியாக அதை `l = Book('Moby Dick', 635)` என எழுதவும். `எல் == புத்தகம்('மொபி டிக்', 635)` என்பதை மதிப்பிடுக.
குறிப்பைக் காட்டு
@dataclass __eq__ ஐ புலம் வாரியாக ஒப்பிட்டு உருவாக்குகிறது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
`பொருட்கள்: பட்டியல்[str]` default_factory=list உடன் தரவு வகுப்பை `Basket` ஐ உருவாக்கவும். உடனடியாக `c1 = Basket()` மற்றும் `c2 = Basket()`, 'mela' ஐ c1.items உடன் இணைக்கவும். அவை ஒரே பட்டியலில் இல்லை என்பதைச் சரிபார்க்க `(c1.items, c2.items)` மதிப்பாய்வு செய்யவும்.
குறிப்பைக் காட்டு
புலம்(default_factory=list) ஒரு நிகழ்வுக்கு ஒரு புதிய பட்டியலுக்கு உத்தரவாதம் அளிக்கிறது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
கூடுதல் சவால்
Import `dataclass` from `dataclasses`. Create a dataclass `Point` containing two float coordinates `x` and `y`. Instantiate a point with `x=1.5` and `y=2.5` storing it in `p`. Finally, evaluate `p`.
குறிப்பைக் காட்டு
வகுப்பு புள்ளிக்கு மேலே @dataclass ஐப் பயன்படுத்தவும், x: float மற்றும் y: float என அறிவிக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்