Classes (Դասեր)

Քանի որ ծրագրերը մեծանում են` դառնալով ավելի մեծ և բարդ, կոդի կառավարումն ու կարգավորումը կարող է բավականին դժվարանալ: Երբ ֆունկցիաները և փոփոխականները ցրված են լինում ծրագրի տարբեր մասերում, դժվար է հետևելը, թե ինչ է կատարվում, և արդյունքում ունենում ենք կոդ, որը դժվար ընթեռնելի է, և որի հետ դժվար է աշխատել հետագայում: Այստեղ գործի են դրվում դասերը, որոնք առարկայակողմնորոշված (object-oriented) ծրագրավորման հիմքն են։
💡
Դասերն այն միջոցներն են, որոնցով կապվում են տվյալները և ֆունկցիաները՝ ստեղծելով «օբյեկտներ»: Օբյեկտների վրա հիմնված ծրագրավորման (OOP) մեջ դասերը հանդես են գալիս որպես հիմնարար հասկացություններ:
 
Class-ներն այն ուղնիշերն են, որոնցով մենք կոդի մեջ օբյեկտներ ենք ստեղծում: Յուրաքանչյուր class առանձին միավորների մեջ ամփոփում է փոխկապակցված հատկությունները (տվյալները) և մեթոդները (ֆունկցիաները): Օրինակ, խաղային ծրագրում դուք կարող եք ունենալ հետևյալ class-ները՝ Player, Monster կամ Item, որոնցից յուրաքանչյուրը կունենա իր տվյալներն ու մեթոդները: Սա հեշտացնում է ծավալուն կոդերի բազաները հասկանալն ու դրանք կառավարելը, քանի որ առնչվող ֆունկցիաները խմբավորված են, և պարզ է, թե դրանք ինչպես են փոխազդում:
Ենթադրենք՝ դուք ցանկանում եք ստեղծել ծրագիր՝ գրադարանը մոդելավորելու համար: Դուք ձեր գրադարանում գրքեր ունեք, ուստի ստեղծում եք Book class-ը.
class Book:
    def __init__(self, title, author, pages):
        self.title = title     # Assign title to the book instance
        self.author = author   # Assign author to the book instance
        self.pages = pages     # Assign number of pages to the book instance
class բանալի բառը վերաբերում է նոր class-ին, որին հաջորդում է դրա անունը՝ (Book): def __init__(self, title, author, pages): Տողը սահմանում է class-ի կամ կոնստրուկտորի սկզբնական վիճակը: Այստեղ է, որ դասը ստեղծում է օբյեկտը: self-ը վերաբերում է class-ին: Իսկ title-ը, author-ը և pages-ը class-ի ատրիբուտներն են:
Կարող եք ստեղծել գրքի նոր օբյեկտ՝ class-ը կանչելով այնպես, ինչպես կանչում եք ֆունկցիան.
# Create a new instance of Book
mockingbird = Book('To Kill a Mockingbird', 'Harper Lee', 281)

print(mockingbird.title)   # To Kill a Mockingbird
print(mockingbird.author)  # Harper Lee
print(mockingbird.pages)   # 281
Ուշադրություն դարձրեք, որ որպես արգումենտներ փոխանցում ենք To Kill a Mockingbird-ը, Harper Lee-ն և 281-ը: Դրանք փոխանցվում են որպես արգումենտներ __init__ մեթոդին (մոտավորապես այնպես, ինչպես սովորական ֆունկցիայի դեպքում):
Մենք կարող ենք ստեղծել Book class-ի մի քանի օբյեկտներ.
# create more book instances
book2 = Book('1984', 'George Orwell', 328)
book3 = Book('The Great Gatsby', author='F. Scott Fitzgerald', pages=180)
book4 = Book('Moby Dick', 'Herman Melville', pages=720)

# print some information about the books
print(f'{book2.title} by {book2.author} has {book2.pages} pages.')  # 1984 by George Orwell has 328 pages.
print(f'{book3.title} by {book3.author} has {book3.pages} pages.')  # The Great Gatsby by F. Scott Fitzgerald has 180 pages.
print(f'{book4.title} by {book4.author} has {book4.pages} pages.')  # Moby Dick by Herman Melville has 720 pages.
Ինչպես ֆունկցիաների դեպքում, մենք __init__ մեթոդին կարող ենք փոխանցել և՛ դիրքային, և՛ keyword արգումենտներ:
Բացի տվյալներից, class-ները կարող են նաև ներառել ֆունկցիոնալությունը: Ենթադրենք, մեր գրադարանային համակարգում ուզում ենք գիրքը նշել որպես կարդացված: Այս նպատակով կարող ենք Book class-ում մեթոդ սահմանել․
class Book:
    def __init__(self, title, author, pages):
        self.title = title     # Assign title to the book instance
        self.author = author   # Assign author to the book instance
        self.pages = pages     # Assign number of pages to the book instance
        self.is_read = False   # Book has not been read yet

    def mark_as_read(self):    # A class method
        self.is_read = True    # Mark the book as read


mockingbird = Book('To Kill a Mockingbird', 'Harper Lee', 281)
print(mockingbird.is_read)   # False, book has not been read yet
mockingbird.mark_as_read()   # Mark the book as read
print(mockingbird.is_read)   # True, book has been read
mark_as_read մեթոդը փոխում է is_read ատրիբուտը True-ի: Մենք կարող ենք կանչել այս մեթոդը Book class-ի ցանկացած օբյեկտի դեպքում: Սա ցույց է տալիս, թե ինչպես կարող ենք միավորել առնչվող տվյալները և ֆունկցիոնալությունը՝ օգտագործելով Python-ի class-ները:
💡
Python-ում self-ը class-ի օբյեկտի մեթոդների առաջին պարամետրի պայմանական անվանումն է: Դա վերաբերում է class-ի ընթացիկ օբյեկտին: self-ն օգտագործվում է class-ի սահմանման մեջ ատրիբուտներին և մեթոդներին հասանելիություն ստանալու համար:
Երբ դուք ստեղծում եք class-ի նոր օբյեկտ, Python-ը ավտոմատ կերպով կապում է self արգումենտն այդ նոր օբյեկտի հետ, ինչի պատճառով դուք չեք փոխանցում self-ը, երբ կանչում եք օբյեկտի մեթոդ:
Թեև self-ը Python-ում հատուկ հիմնաբառ չէ, այն լայնորեն կիրառվում է իր պարզ և ընթեռնելի ոճի շնորհիվ: Ի դեպ, դուք կարող եք օգտագործել ցանկացած այլ անուն, սակայն խորհուրդ է տրվում կիրառել self-ը, քանի որ այն ընդունված է համարել որպես լավագույն տարբերակ։

Առաջադրանք․ ստեղծեք «մեքենա» դաս

Ձեզ հանձնարարված է ստեղծել Car class, որը պետք է ունենա հետևյալ ատրիբուտները.
  • color (մեքենայի գույնը)
  • make (մեքենայի մակնիշը)
  • model (մեքենայի հատուկ մոդել)
  • year (ստեղծման տարեթիվը)
Այս ատրիբուտները պետք է սահմանվեն class-ի __init__ մեթոդով:
Բացի այդ, Car class-ը պետք է ունենա display_details մեթոդ: Այս մեթոդը պետք է վերադարձնի մեքենայի մանրամասները որպես տող՝ [year] [color] [make] [model] ձևաչափով:
Մուտք
Ելք
c = Car('red', 'Ferrari', 'F8', 2023); print(c.display_details())
2023 red Ferrari F8
c = Car('black', 'Tesla', 'Model S', 2021); print(c.display_details())
2021 black Tesla Model S
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in