Η μέθοδος __init__()
είναι μια ειδική μέθοδος που υπάρχει σε κάθε κλάση στην Python και καλείται κατά την αρχικοποίηση ενός αντικειμένου της κλάσης. Χρησιμοποιείται για να αρχικοποιήσει μεταβλητές και ιδιότητες του αντικειμένου, έτσι ώστε να έχουν κάποιες αρχικές τιμές κατά τη δημιουργία του αντικειμένου.
Η μέθοδος __init__()
συνήθως παίρνει τον εαυτό της (self
) ως πρώτη παράμετρο και μπορεί να παίρνει και άλλες παραμέτρους ανάλογα με τις ανάγκες της κλάσης. Μέσα στην __init__()
μπορείτε να αρχικοποιήσετε μεταβλητές, να δημιουργήσετε αντικείμενα άλλων κλάσεων, να εκτελέσετε κάποιον κώδικα και να κάνετε άλλες ενέργειες που είναι απαραίτητες για την αρχική διάταξη του αντικειμένου.
Η χρήση της μεθόδου __init__()
σας επιτρέπει να διασφαλίσετε ότι τα αντικείμενα της κλάσης έχουν τις κατάλληλες αρχικές τιμές και καταστάσεις πριν χρησιμοποιηθούν σε οποιαδήποτε λειτουργία ή μέθοδο της κλάσης.
Η σύνταξη της init() είναι η εξής:
class MyClass: def __init__(self, arg1, arg2): # Ο κατασκευαστής της κλάσης MyClass. Αρχικοποιεί τις ιδιότητες property1 και property2 με τις τιμές arg1 και arg2 αντίστοιχα. self.property1 = arg1 self.property2 = arg2
Ο παραπάνω κώδικας ορίζει μια κλάση με το όνομα MyClass. Η κλάση αυτή έχει έναν κατασκευαστή (constructor) με το όνομα __init__
, ο οποίος δέχεται δύο ορίσματα (arg1
και arg2
).
Μέσα στον κατασκευαστή __init__
, οι ιδιότητες property1
και property2
του αντικειμένου της κλάσης (self
) αρχικοποιούνται με τις τιμές των ορισμάτων arg1
και arg2
αντίστοιχα. Αυτό σημαίνει ότι κάθε φορά που δημιουργείται ένα αντικείμενο της κλάσης MyClass, μπορούμε να περάσουμε δύο τιμές και αυτές οι τιμές θα αποθηκευτούν στις ιδιότητες property1
και property2
αντίστοιχα.
Ο κώδικας αυτός δημιουργεί μια αρχική κατάσταση για τα αντικείμενα της κλάσης MyClass, ορίζοντας τις αρχικές τιμές των ιδιοτήτων τους.
Ένα ακόμα παράδειγμα μπορεί να είναι η δημιουργία μιας κλάσης “Person”, όπου η συνάρτηση init() θα χρησιμοποιηθεί για να αρχικοποιήσει τις ιδιότητες του αντικειμένου Person (όπως το όνομα και την ηλικία).
Παρακάτω παρατίθεται ένα παράδειγμα κώδικα σε Python:
class Person: def __init__(self, name, age): self.name = name # Αρχικοποίηση της μεταβλητής name με την τιμή που δίνεται ως όρισμα self.age = age # Αρχικοποίηση της μεταβλητής age με την τιμή που δίνεται ως όρισμα def my_func(self): print("Hello, my name is " + self.name) # Εκτύπωση μηνύματος που περιλαμβάνει την τιμή της μεταβλητής name p1 = Person("John", 36) # Δημιουργία ενός αντικειμένου της κλάσης Person με τα όρισματα "John" και 36 p1.my_func() # Κλήση της μεθόδου my_func για το αντικείμενο p1
Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα “Person” που αναπαριστά μια προσωπική καταχώρηση. Η κλάση έχει έναν constructor (__init__
) που αρχικοποιεί τις μεταβλητές name
και age
με τις τιμές που δίνονται ως ορίσματα.
Υπάρχει επίσης μια μέθοδος με το όνομα my_func
που εκτυπώνει ένα μήνυμα που περιλαμβάνει την τιμή της μεταβλητής name
.
Στη συνέχεια, δημιουργείται ένα αντικείμενο με την κλάση Person
και δίνονται οι τιμές “John” και 36 ως ορίσματα. Τέλος, καλείται η μέθοδος my_func
για το αντικείμενο που δημιουργήθηκε, προκαλώντας την εκτύπωση του μηνύματος “Hello, my name is John” στην έξοδο.
Παρακάτω έχουμε ένα ακόμα παράδειγμα που δείχνει πως μπορούμε να χρησιμοποιήσουμε τη μέθοδο __init__()
για να αρχικοποιήσουμε τα αντικείμενα ενός κατασκευαστή αυτοκινήτων:
class Car: def __init__(self, make, model, year): self.make = make # Αρχικοποίηση του γνωρίσματος 'make' με την τιμή που δίνεται ως παράμετρο self.model = model # Αρχικοποίηση του γνωρίσματος 'model' με την τιμή που δίνεται ως παράμετρο self.year = year # Αρχικοποίηση του γνωρίσματος 'year' με την τιμή που δίνεται ως παράμετρο def start(self): print("Starting the engine") # Εκτύπωση μηνύματος "Starting the engine" όταν καλείται η μέθοδος 'start' my_car = Car("Toyota", "Corolla", 2022) # Δημιουργία ενός αντικειμένου 'my_car' της κλάσης Car print(my_car.make) # Εκτύπωση της τιμής του γνωρίσματος 'make' του αντικειμένου 'my_car' print(my_car.model) # Εκτύπωση της τιμής του γνωρίσματος 'model' του αντικειμένου 'my_car' print(my_car.year) # Εκτύπωση της τιμής του γνωρίσματος 'year' του αντικειμένου 'my_car' my_car.start() # Κλήση της μεθόδου 'start' του αντικειμένου 'my_car'
Ο παραπάνω κώδικας πραγματοποιεί τις εξής ενέργειες:
- Ορίζεται η κλάση
Car
, η οποία έχει έναν κατασκευαστή (__init__
) και μια μέθοδοstart
. - Στον κατασκευαστή
__init__
, ορίζονται τα γνωρίσματα (make
,model
,year
) της κλάσηςCar
και αρχικοποιούνται με τις τιμές που δίνονται ως παράμετροι. - Η μέθοδος
start
απλά εκτυπώνει το μήνυμα “Starting the engine” στην οθόνη. - Δημιουργείται ένα αντικείμενο
my_car
της κλάσηςCar
, περνώντας τις τιμές “Toyota”, “Corolla”, 2022 για τα γνωρίσματά του. - Εκτυπώνονται οι τιμές των γνωρισμάτων
make
,model
,year
του αντικειμένουmy_car
. - Καλείται η μέθοδος
start
του αντικειμένουmy_car
, η οποία εκτυπώνει το μήνυμα “Starting the engine” στην οθόνη.
Έτσι, ο κώδικας δημιουργεί ένα αντικείμενο τύπου Car
και εκτελεί μερικές ενέργειες σχετικές με το αντικείμενο, όπως την προβολή των γνωρισμάτων του και την εκτέλεση της μεθόδου start
.
Μπορούμε να καθορίσουμε τον τρόπο με τον οποίο θα αναπαρίσταται ένα αντικείμενο σαν συμβολοσειρά χρησιμοποιώντας τη μέθοδο __str__()
.
Ας δούμε ένα παράδειγμα:
class Person: def __init__(self, name, age): self.name = name # Αρχικοποίηση της μεταβλητής name με την τιμή που περνιέται ως παράμετρος self.age = age # Αρχικοποίηση της μεταβλητής age με την τιμή που περνιέται ως παράμετρος def __str__(self): return f"My name is {self.name} and I am {self.age} years old." # Επιστροφή μιας συμβολοσειράς που περιέχει το όνομα και την ηλικία του ατόμου person = Person("Mike", 19) # Δημιουργία ενός αντικειμένου της κλάσης Person με τα στοιχεία "Mike" και 19 print(person) # Εκτύπωση του αντικειμένου person, η οποία καλεί τη μέθοδο __str__() της κλάσης Person
Ο παραπάνω κώδικας δημιουργεί μια κλάση με το όνομα “Person”. Η κλάση αυτή έχει δύο μεθόδους:
- Η μέθοδος
__init__
είναι ο κατασκευαστής της κλάσης και χρησιμοποιείται για να αρχικοποιήσει τις μεταβλητές ενός αντικειμένου τύπου Person. Λαμβάνει ως παραμέτρους το όνομα (name
) και την ηλικία (age
) του ατόμου και τις αποθηκεύει στις αντίστοιχες μεταβλητές της κλάσης (self.name
καιself.age
). - Η μέθοδος
__str__
είναι μια ειδική μέθοδος που επιστρέφει μια συμβολοσειρά που περιγράφει το αντικείμενο της κλάσης Person. Στην περίπτωση αυτή, η μέθοδος επιστρέφει μια συμβολοσειρά που περιέχει το όνομα και την ηλικία του ατόμου.
Στη συνέχεια, δημιουργείται ένα αντικείμενο person
της κλάσης Person με τα στοιχεία “Mike” και 19. Τέλος, εκτυπώνεται το αντικείμενο person
, καλώντας τη μέθοδο __str__()
της κλάσης Person, η οποία εμφανίζει το μήνυμα “My name is Mike and I am 19 years old.”
Ας υλοποιήσουμε ένα παράδειγμα όπου ορίζουμε μια κλάση με το όνομα “Car”. Στην κλάση αυτή, θα προσθέσουμε μια μέθοδο με το όνομα “display_info” που θα χρησιμοποιείται για να εμφανίζει τα χαρακτηριστικά ενός αυτοκινήτου, όπως η μάρκα, το μοντέλο και το έτος κατασκευής.
Η κλάση θα έχει έναν κατασκευαστή (constructor) που θα δέχεται τα χαρακτηριστικά του αυτοκινήτου και θα τα αποθηκεύει στις αντίστοιχες μεταβλητές της κλάσης (π.χ., self.brand, self.model, self.year).
Η μέθοδος “display_info” θα είναι υπεύθυνη για την εκτύπωση των χαρακτηριστικών του αυτοκινήτου σε μια συμβολοσειρά. Αυτή η μέθοδος θα χρησιμοποιείται για να εμφανίζεται η πληροφορία του αυτοκινήτου όταν καλούμε την συνάρτηση print() για ένα αντικείμενο της κλάσης Car.
Ας δούμε τον κώδικα παρακάτω:
class Car: def __init__(self, brand, model, year): self.brand = brand # Αποθήκευση της μάρκας του αυτοκινήτου στη μεταβλητή brand self.model = model # Αποθήκευση του μοντέλου του αυτοκινήτου στη μεταβλητή model self.year = year # Αποθήκευση της χρονιάς κατασκευής του αυτοκινήτου στη μεταβλητή year def display_info(self): print(f"Brand: {self.brand}, Model: {self.model}, Year: {self.year}") # Εκτύπωση πληροφοριών του αυτοκινήτου car = Car("Toyota", "Corolla", 2022) # Δημιουργία αντικειμένου της κλάσης Car με συγκεκριμένες παραμέτρους car.display_info() # Κλήση της μεθόδου display_info για εμφάνιση των πληροφοριών του αυτοκινήτου
Στο παραπάνω παράδειγμα, δημιουργούμε ένα αντικείμενο της κλάσης Car με τις πλ
ηροφορίες “Toyota”, “Corolla” και 2022. Έπειτα, καλούμε τη μέθοδο “display_info()” για να εμφανιστούν τα χαρακτηριστικά του αυτοκινήτου. Το αποτέλεσμα που θα εκτυπωθεί θα είναι “Brand: Toyota, Model: Corolla, Year: 2022”.