முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 7 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 27/36~12 min
தொகுதி பாடங்கள் (3/4)

சிறப்பு முறைகள் (டண்டர்)

சிறப்பு முறைகள் (டண்டர் முறைகள் ஏனெனில் அவை தொடங்கி முடிவடைகின்றன இரட்டை அடிக்கோடுடன்: __name__) உங்கள் பொருட்களை அனுமதிக்கும் கொக்கிகள் மொழியுடன் ஒருங்கிணைக்கவும்: உரை பிரதிநிதித்துவம், == உடன் ஒப்பிடுதல், len(), in, ஆபரேட்டர்கள் போன்றவற்றுக்கான ஆதரவு.

நீங்கள் ஏற்கனவே ஒன்றைப் பயன்படுத்தியுள்ளீர்கள்: __init__.

__str__ மற்றும் __repr__

print() மற்றும் REPL இல் தோன்றுவதை அவை கட்டுப்படுத்துகின்றன.

Python
class Punto:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Punto({self.x}, {self.y})"

    def __str__(self):
        return f"({self.x}, {self.y})"

p = Punto(3, 4)
str(p)        # '(3, 4)'        — per umani
repr(p)       # 'Punto(3, 4)'   — per debugger / dev
print(p)      # '(3, 4)'
p             # Punto(3, 4)     in REPL → repr
[p, p]        # [Punto(3, 4), Punto(3, 4)]   — sempre repr nei contenitori

நீங்கள் __repr__ ஐ மட்டும் வரையறுத்தால், பைதான் அதை ஃபால்பேக்காகவும் பயன்படுத்துகிறது __str__.

__eq__: மறுவரையறை ==

இயல்புநிலையாக a == b பொருள்களின் அடையாளங்களை ஒப்பிடுகிறது (is), இல்லை அவற்றின் உள்ளடக்கங்கள். கட்டமைப்பு ஒப்பீட்டுக்கு, __eq__ ஐ வரையறுக்கவும்:

Python
class Punto:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __eq__(self, other):
        if not isinstance(other, Punto):
            return NotImplemented
        return (self.x, self.y) == (other.x, other.y)

Punto(1, 2) == Punto(1, 2)    # True
Punto(1, 2) == Punto(3, 4)    # False

வகைகளின் போது NotImplemented (ஒரு சிறப்புச் சொல், False அல்ல!) திரும்புகிறது ஒப்பிட முடியாதது சரியான நடைமுறை: பைதான் அதன் பிறகு முயற்சிக்கும் மற்ற செயல்பாட்டின் __eq__.

__len__: len()க்கான ஆதரவு

Python
class Cesto:
    def __init__(self):
        self.frutti = []

    def __len__(self):
        return len(self.frutti)

c = Cesto()
c.frutti.append("mela")
len(c)        # 1
bool(c)       # True (len > 0)

__len__ வரையறுப்பதன் மூலம், நீங்கள் பூலியன்ஐ இலவசமாகப் பெறுவீர்கள்: ஒரு பொருள் len() == 0 உடன் தவறானது.

மற்ற பயனுள்ள டண்டர்கள் (கண்ணோட்டம்)

  • __add__(self, other) → மறுவரையறை +
  • __lt__, __le__, __gt__, __ge__ → ஒப்பீட்டு ஆபரேட்டர்கள்
  • __contains__(self, item) → ஆதரிக்கிறது item in self
  • __iter__ + __next__ → பொருளை மீண்டும் இயக்கக்கூடியதாக ஆக்குகிறது
  • __getitem__(self, key) → ஆதரிக்கிறது self[key]
  • __hash__ → ஒரு டிக்ட் கீ / செட் உறுப்பாக இருக்க வேண்டும்

உங்கள் முறை

உடற்பயிற்சி#python.m7.l3.e1
முயற்சிகள்: 0ஏற்றுகிறது…

`பணம்` என்பதை __init__(சுய, தொகை, நாணயம்) மற்றும் __str__ உடன் `f'{amount} {currency}'` என்பதை வரையறுக்கவும். `s = Money(42, 'EUR')` ஐ உருவாக்கி, `str(s)` ஐ மதிப்பிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

__str__ இல் f-ஸ்ட்ரிங்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#python.m7.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

(a, b) இன் கட்டமைப்பு ஒப்பீட்டின் அடிப்படையில் __init__(self, a, b) மற்றும் __eq__ உடன் `ஜோடி` என்பதை வரையறுக்கவும். `ஜோடி(1, 2) == ஜோடி(1, 2)` ஐ மதிப்பிடுக.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

டூப்பிள்களை (self.a, self.b) == (other.a, other.b) ஒப்பிடுக.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

கூடுதல் சவால்

உடற்பயிற்சி#python.m7.l3.e3
முயற்சிகள்: 0ஏற்றுகிறது…

\`தலைப்பு\` மற்றும் \`ஆசிரியர்\` ஆகியவற்றைக் கொண்டு கன்ஸ்ட்ரக்டருடன் \`புத்தகம்\` வகுப்பை வரையறுக்கவும். \`__str__(self)\` என்ற சிறப்பு முறையை வரையறுத்து, அது \`"ஆசிரியரின் தலைப்பு"\` சரத்தை வழங்கும் (எ.கா. \`'1984 by George Orwell'\`). ஒரு புத்தகத்தை உடனுக்குடன் மற்றும் \`str(புத்தகம்)\` மதிப்பிடவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

def __str__(self) இன் உள்ளே {self.author}" f"{self.title} ஐப் பயன்படுத்தவும்:

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்