Python-ի միջին մակարդակ

Կախարդական մեթոդներ

Python-ում կախարդական մեթոդները հատուկ մեթոդներ են, որոնք դուք կարող եք սահմանել՝ ձեր կլասներին ֆունկցիոնալություն ավելացնելու համար: Դրանք նաև հայտնի են որպես dunder մեթոդներ՝ իրենց անուններին նախորդող և հաջորդող կրկնակի __ տակի գծիկների շնորհիվ: Դուք արդեն հանդիպել եք այս մեթոդներից երկուսին` __init__ և __str__: Նայեք մի պարզ օրինակի.
class Circle:
    def __init__(self, radius):                     # Initialize the object
        self.radius = radius

    def __str__(self):                              # Represent as a string
        return f'Circle with radius {self.radius}'

c = Circle(5)    # Create a Circle object named c
print(c)         # Circle with radius 5
Օրինակում մենք սահմանել ենք երկու կախարդական մեթոդ.
  • __init__-ը կոնստրուկտորական մեթոդ է, որը կանչվում է, երբ ստեղծվում է կլասի օբյեկտը: Այստեղ այն սահմանում է Circle-ի շառավիղը:
  • __str__-ն սահմանում է, թե ինչպես կլասի օբյեկտը պետք է փոխարկվի տողի, երբ օգտագործվում է այնպիսի համատեքստերում, ինչպիսին է print():
Բայց սրանք միակ կախարդական մեթոդները չեն Python-ում: Կան շատ ուրիշները: Ստորև ներկայացված են մի քանիսը, որոնք թույլ են տալիս մեզ այնպես անել, որ կլասի օբյեկտները կարողանան գումարվել +-ի հետ միջոցով կամ համեմատել < կամ >-ի միջոցով:
class Circle:
    def __init__(self, radius):                     # Initialize the object
        self.radius = radius

    def __str__(self):                              # Represent as a string
        return f'Circle with radius {self.radius}'

    def __add__(self, other):                       # Add two circles
        return Circle(self.radius + other.radius)   # Return a new circle

    def __lt__(self, other):                        # Less than comparison of two circles
        return self.radius < other.radius           # Compare radiuses

c1 = Circle(5)
c2 = Circle(7)
c3 = c1 + c2     # This would create a new Circle with radius 12
print(c3)        # Circle with radius 12
print(c1 < c2)   # True
Այս դեպքում:
  • __add__- թույլ է տալիս մեզ օգտագործել + օպերատորը Circle-ի օբյեկտների վրա: Այն գումարում է շրջանագծերի շառավիղները և վերադարձնում նոր Circle:
  • __lt__ (փոքր քան) թույլ է տալիս համեմատել երկու Circle օբյեկտներ < օպերատորի միջոցով: Այն ստուգում է, թե արդյոք առաջին շրջանագծի շառավիղը փոքր է երկրորդի շառավղից:
Կախարդական մեթոդները մեր Python կլասները դարձնում են ավելի արտահայտիչ և ինտուիտիվ՝ Python-ի ներկառուցված օբյեկտների նման պահելով:
Հիշեք, որ պահպանեք հատուկ կրկնակի տակի գծիկով անվանումը, քանի որ Python-ի թարգմանիչը փնտրում է այս հատուկ անվանված մեթոդները՝ որոշակի գործողություններ կատարելու համար: Դուք կարող եք գտնել Python-ում առկա բոլոր կախարդական մեթոդների ցանկը՝ հետևելով այս հղմանը։ Ստորև ներկայացված են կախարդական մեթոդներից մի քանիսը.
Կախարդական մեթոդ
Օպերատոր
Նկարագրություն
__eq__
==
Վերադարձնում է True, եթե self-ը հավասար է other-ին:
__lt__
<
Վերադարձնում է True, եթե self-ը փոքր է, քան other-ը:
__le__
<=
Վերադարձնում է True, եթե self-ը փոքր է կամ հավասար other-ից:
__gt__
>
Վերադարձնում է True, եթե self-ը ավելի մեծ է, քան other-ը:
__ge__
>=
Վերադարձնում է True, եթե self-ը մեծ է կամ հավասար other-ից:
__add__(self, other)
+
Իրականացնում է գումարում + օպերատորի միջոցով:
__sub__(self, other)
-
Իրականացնում է հանում - օպերատորի միջոցով:
__mul__(self, other)
*
Իրականացնում է բազմապատկում * օպերատորի միջոցով:
__truediv__(self, other)
/
Իրականացնում է բաժանում / օպերատորի միջոցով:
__floordiv__(self, other)
//
Իրականացնում է ամբողջ մասի բաժանում // օպերատորի միջոցով:
__mod__(self, other)
%
Իրականացնում է մոդուլը % օպերատորի միջոցով:
__pow__(self, other)
**
Իրականացնում է աստիճանը ** օպերատորի միջոցով:
__abs__(self)
abs()
Իրականացնում է վարքագիծը ներկառուցված abs() ֆունկցիայի համար:
__round__(self, n)
round()
Իրականացնում է վարքագիծը ներկառուցված round() ֆունկցիայի համար:
__neg__(self)
-
Implements negation with the unary - operator.
💡
Նկատի ունեցեք, որ ոչ բոլոր մեթոդներն իմաստ ունեն բոլոր կլասների համար. դուք պետք է ստեղծեք միայն նրանք, որոնք օգտակար են ձեր խնդրի համար:

Առաջադրանք: Ստեղծեք Vector կլաս

Ձեզանից պահանջվում է սահմանել կլաս՝ Vector, որը ներկայացնում է x, y և z ատրիբուտներով եռաչափ վեկտոր:
Կլասը պետք է ներառի հատուկ մեթոդների իրականացում __add__, __sub__ և __mul__ վեկտորի գումարման, հանման և կետային արտադրյալի համար համապատասխանաբար:
Դրանցից բացի, կիրառեք magnitude մեթոդը, վեկտորի մեծությունը հաշվարկելու համար:
notion image
Պահանջվող մեթոդները.
  • __add__: Այս մեթոդը պետք է ընդունի մեկ այլ Vector օբյեկտ և վերադարձնի նոր Vector, որը երկու վեկտորների x, y և z բաղադրիչներն գումարման արդյունք է:
  • __sub__: Այս մեթոդը պետք է ընդունի մեկ այլ Vector օբյեկտ և վերադարձնի նոր Vector, որը երկրորդ վեկտորի x, y և z բաղադրիչներն առաջինից հանելու արդյունք է:
  • __mul__: Այս մեթոդը պետք է ընդունի մեկ այլ Vector օբյեկտ և վերադարձնի երկու վեկտորների կետային արտադրյալը՝ հաշվարկվում է որպես .
  • magnitude: Այս մեթոդը պետք է վերադարձնի վեկտորի մեծությունը (երկարությունը), որը հաշվարկվում է որպես.
Մուտք
Ելք
v1 = Vector(1, 2, 3); v2 = Vector(4, 5, 6); v3 = v1 + v2; v4 = v1 - v2; print(v1 * v2); print(v1.magnitude()); v4 = Vector(-3, -3, -3)
32 3.74165
 

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in