Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Σχετικά έγγραφα
Εισαγωγή στα Αντικείμενα

2.1 Αντικειµενοστρεφής προγραµµατισµός

Κλάσεις στην Python. Δημιουργία κλάσεων

Κλάσεις στην Python. Δημιουργία κλάσεων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

Γραφικά υπολογιστών Εργαστήριο 9 Κλάσεις στην Python. Σκοπός της 9ης άσκησης είναι να μάθουμε αντικειμενοστρεφή προγραμματισμό στην Python.

Αντικειμενοστρεφής Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Εισαγωγή στον Προγ/μό Υπολογιστών

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Προγραµµατιστικές τεχνικές

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αντικειμενοστραφής Προγραμματισμός

Εισαγωγή στους Υπολογιστές

Εισαγωγή στον Προγραμματισμό με C++

Γλωσσική Τεχνολογία. Object-Orientation in Python

Προγραμματιστικές τεχνικές

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2018 Β ΦΑΣΗ

Εισαγωγή στον Προγραμματισμό με C++

(Διαφάνειες Νίκου Βιδάκη)

Κλάσεις και αντικείμενα #include <iostream.h<

PYTHON ΑΣΚΗΣΕΙΣ ΣΤΟΝ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΣΕ ΚΩΝΣΤΑΝΤΙΝΟΣ ΤΣΙΝΤΖΙΛΙΔΑΣ ΕΚΠΑΙΔΕΥΤΙΚΟΣ ΚΛ. ΠΕ86 ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΑΛ ΤΗΝΟΥ ΤΟΜΕΑΣ: ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Τι είναι κλάση Κλάση

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

Ανακτήθηκε από την ΕΚΠΑΙΔΕΥΤΙΚΗ ΚΛΙΜΑΚΑ

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

3 Αλληλεπίδραση Αντικειμένων

Ειδικά Θέματα Προγραμματισμού

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

6 η Διάλεξη Python Κλάσεις & Αντικείμενα

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΠΤΑ (7)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Αντικειμενοστραφής Προγραμματισμός και JavaScript

ΗΥ101: Εισαγωγή στην Πληροφορική

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Διδακτική Προσέγγιση για τον Αντικειμενοστρεφή Προγραμματισμό: εφαρμογή στο BlueJ

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

Πληρουορική Γ Γσμμασίοσ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Κλάσεις και Αντικείµενα

Αντικειμενοστρεφής Προγραμματισμός

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Με τι ασχολείται ο αντικειμενοστραφής προγραμματισμός

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Προγραµµατιστικές τεχνικές

ΚΕΦΑΛΑΙΟ 8. Κλάσεις και αντικείμενα. 8.1 Εισαγωγή

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Σύνθεση και Κληρονομικότητα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός

Προγραμματιστικές τεχνικές

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Προγράμματα με δομή Κληρονομικότητας

Οντοκεντρικός Προγραμματισμός

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Προγραμματισμός ΙI (Θ)

Προγραμματιστικά Εργαλεία και Τεχνολογίες για Επιστήμη Δεδομένων

Σύνθεση και Κληρονομικότητα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Αντικειµενοστραφής Προγραµµατισµός

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 10/1/08

Α. Ερωτήσεις Ανάπτυξης

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ. Ι. Ψαρομήλιγκος Χ. Κυτάγιας

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Διαδικασιακός Προγραμματισμός

Ενότητα 13: Διδασκαλία Οντοκεντρικού Προγραμματισμού. Διδάσκων: Βασίλης Κόμης, Καθηγητής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Διαδικασιακός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

Δομημένος Προγραμματισμός

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Προγραμματισμός Ι (ΗΥ120)

του προγράμματος diagrama_rohs.zip )

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Διαδικασιακός Προγραμματισμός

Transcript:

Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Διαδικασιακός προγραμματισμός Ο Διαδικασιακός προγραμματισμός δίνει έμφαση στις ενέργειες/διεργασίες/εντολές που γίνονται πάνω σε συγκεκριμένες έννοιες/οντότητες/δεδομένα/αντικείμενα ενώ ο Αντικειμενοστραφής το το ακριβώς ανάποδο. Ειδικότερα: Διαδικασιακός Προγραμματισμός Ποιες ενέργειες γίνονται; Αντικειμενοστραφής Προγραμματισμός Ποιες οντότητες έχουμε;

Αντικείμενα Αντικείμενο σε μια αντικειμενοστραφή γλώσσα προγραμματισμού, είναι ένα οποιοδήποτε αντικείμενο της πραγματικής ζωής που το περιγράφουμε με τη χρήση κώδικα. Κάθε αντικείμενο (έμψυχο ή άψυχο) έχει συγκεκριμένες ιδιότητες ενώ μπορεί να εκτελεί και κάποιες συγκεκριμένες ενέργειες. Παραδείγματα. Ένα τραπέζι έχει τις ιδιότητες ύψος, υλικό, χρώμα κτλ. Ένα ορθογώνιο αντίστοιχα έχει τις ιδιότητες πλάτος, ύψος, εμβαδόν, περίμετρος κτλ. Ένας σκύλος έχει τις ιδιότητες όνομα, ράτσα, φύλλο κτλ. αλλά επίσης μπορεί και να εκτελεί διάφορες ενέργειες όπως π.χ. να γαυγίσει, να τρέξει, να περπατήσει, να φάει κτλ.

Αντικείμενα Στον αντικειμενοστρεφή προγραμματισμό κυρίαρχη θέση έχει η έννοια αντικείμενο (object). Τα αντικείμενα είναι οποιαδήποτε οντότητα της καθημερινότητας (πχ αυτοκίνητο) το οποίο αναπαρίσταται μέσω κώδικα. Κάθε αντικείμενο έχει χαρακτηριστικά τα οποία ονομάζονται ιδιότητες (attributes) και περιγράφουν το αντικείμενο. Για παράδειγμα το αυτοκίνητο έχει χρώμα, κυβισμό, ιπποδύναμη κοκ που το κάνουν να ξεχωρίζει από τα υπόλοιπα. Πάνω σε κάθε αντικείμενο μπορούν να εκτελεστούν ενέργειες οι οποίες ονομάζονται μέθοδοι (methods) και τροποποιούν την κατάσταση του αντικειμένου. Για παράδειγμα το αυτοκίνητο μπορεί να επιταχύνει, να στρίψει αριστερά ή δεξιά, να κορνάρει κτλ. Αν και η Python υποστηρίζει τέλεια τον διαδικασιακό προγραμματισμό, στην πραγματικότητα είναι μια αντικειμενοστρεφής γλώσσα.

Κατασκευή αντικειμένων Ποιος παράγει τα αντικείμενα στην Python; Ποιος παράγει το αυτοκίνητο; Ο κατασκευαστής (constructor) OPEL Η OPEL όταν παράγει ένα συγκεκριμένο μοντέλο αυτοκινήτου, το δημιουργεί βάσει ενός καλουπιού έτσι ώστε όλα τα αυτοκίνητα να έχουν για παράδειγμα το ίδιο σχήμα, τον ίδιο τύπο ελαστικών, τον ίδιο βασικό εξοπλισμό, αρχική τιμή του χιλιομετρητή μηδέν κοκ. Με την ίδια λογική ο κατασκευαστής της Python δημιουργεί αυτοκίνητα με συγκεκριμένες αρχικές τιμές, όπως: Μάρκα= OPEL Κάθε φορά που καλούμε τον κατασκευαστή είμαστε Μοντέλο= ASTRA βέβαιοι ότι θα φτιαχτεί ένα αντικείμενο Κυβισμός=1600 συγκεκριμένων προδιαγραφών!!! Η διαδικασία δημιουργίας ενός αντικειμένου και η απόδοση αρχικών τιμών στις ιδιότητες του ονομάζεται αρχικοποίηση (initialization). Κάποιες από τις τιμές αυτές μπορούν να μεταβληθούν και αργότερα μετά την κατασκευή του αυτοκινήτου, για παράδειγμα οι ζάντες του, η ύπαρξη ή όχι συστήματος πλοήγησης κοκ.

Καταστροφή αντικειμένων Όπως υπάρχει κάποια μέθοδος που κατασκευάζει αντικείμενα (και δεσμεύει αντίστοιχο χώρο μνήμης) υπάρχει και μία μέθοδος που τα καταστρέφει (και αποδεσμεύει τον αντίστοιχο χώρο μνήμης). Η μέθοδος αυτή λέγεται αποδομητής (destructor).

Οι κλάσεις και τα αντικείμενα Τι είναι μια κλάση αντικειμένων; Είναι μια περιγραφή ενός τύπου αντικειμένου δηλαδή των χαρακτηριστικών και της συμπεριφοράς του. Στην ουσία πρόκειται για το «καλούπι» ή το σχέδιο δημιουργίας ενός αντικειμένου.

Οι κλάσεις, οι υποκλάσεις και τα αντικείμενα Bicycles Κλάση γονέας (parent class) Mountain Bikes Road Bikes Kid Bikes Υποκλάσεις (subclasses) Αντικείμενα (objects)

Κληρονομικότητα (Inheritance) Bicycles Mountain Bikes Road Bikes Kid Bikes Με τον όρο κληρονομικότητα, εννοούμε την αυτόματατη μεταβίβαση των ιδιοτήτων και των μεθόδων που αντιστοιχούν σε ένα επίπεδο, σε όλα τα επόμενα επίπεδα. Σε κάθε επίπεδο μπορούμε να προσθέσουμε ιδιότητες ή μεθόδους που δεν υπάρχουν στα ανώτερα επίπεδα.

Οι κλάσεις, οι υποκλάσεις και τα αντικείμενα

Ορισμός κλάσης στην Python Ιδιότητες της κλάσης: Χρώμα (color) Τιμή (price) Πλήθος ελαστικών (wheels) Τρέχουσα ταχύτητα (speed) Μέθοδοι της κλάσης Αύξηση ταχύτητας (accelerate) Μείωση ταχύτητας (decelerate) class Vehicle: def init (self,color,price,wheels,speed): self.color=color self.price=price self.wheels=wheels self.speed=speed def accelerate(self,amount): self.speed+=amount return self.speed def decelerate(self,amount): self.speed-=amount return self.speed κατασκευαστής (constructor)

Ορισμός κλάσης στην Python Ιδιότητες Μέθοδοι class Vehicle: def init (self,c,p,w,s): self.color=c self.price=p self.wheels=w self.speed=s def accelerate(self,amount): self.speed+=amount return self.speed def decelerate(self,amount): self.speed-=amount return self.speed Τιμές των ιδιοτήτων

Δημιουργία αντικειμένων στην Python Στο παρακάτω παράδειγμα δημιουργούμε δύο αντικείμενα (αυτοκίνητα) της κλάσης Vehicle με συγκεκριμένες ιδιότητες το καθένα. Αυτοκίνητο 1 Όνομα Χρώμα (color) Τιμή (price) Πλήθος ελαστικών (wheels) Τρέχουσα ταχύτητα (speed) Αυτοκίνητο 2 Όνομα Χρώμα (color) Τιμή (price) Πλήθος ελαστικών (wheels) Τρέχουσα ταχύτητα (speed) car1 yellow 2000 4 80 testcar blue 5000 4 100 car1=vehicle('yellow',2000,4,80) testcar=vehicle( blue',5000,4,100) Στιγμιότυπα της κλάσης (instances)

Δεσμευμένη λέξη self Η παράμετρος self επιτρέπει σε μια μέθοδο να μπορεί να αναφέρεται μόνο σε ένα, κάθε φορά, συγκεκριμένο αντικείμενο (της κλάσης) και όχι σε ολόκληρη την κλάση. Δηλαδή η εντολή testcar.accelerate(40) έχει ως αποτέλεσμα να αυξηθεί η ταχύτητα μόνο του αντικειμένου testcar και όχι όλων των αντικειμένων της κλάσης.

class Vehicle: def init (self,c,p,w): self.color=c self.price=p self.wheels=w def set_speed(self, speed=100): self.speed=speed def accelerate(self,amount): self.speed+=amount return self.speed Κατασκευών συνέχεια Τι πήγε στραβά; def decelerate(self,amount): self.speed-=amount return self.speed car1=vehicle('yellow', 2000.00, 4) car1.accelerate(10) Η μέθοδος accelerate επιχειρεί να τροποποιήσει μια ιδιότητα (speed) την οποία δεν έχει το αντικείμενο όταν αυτό παράχθηκε από τον κατασκευαστή. Η συγκεκριμένη ιδιότητα (speed) ορίζεται από την μέθοδο set_speed(). Για να γίνουν όλα σωστά πρέπει πρώτα να εκτελεστεί η μέθοδος set_speed και μετά να εκτελεστεί η μέθοδος accelerate.

class Vehicle: def init (self,c,p,w): self.color=c self.price=p self.wheels=w self.speed=100 def accelerate(self,amount): self.speed+=amount return self.speed Κατασκευών συνέχεια Είναι προτιμότερο ο ορισμός όλων των ιδιοτήτων να γίνεται στον κατασκευαστή def decelerate(self,amount): self.speed-=amount return self.speed car1=vehicle('yellow', 2000.00, 4) car1.accelerate(10) Κανένα πρόβλημα πλέον με την εκτέλεση της συνάρτησης accelerate, αφού η ιδιότητα speed έγινε στον κατασκευαστή

Ορισμός ιδιοτήτων μιας κλάσης Ά τρόπος - Ορισμός μιας ιδιότητας μέσα στον ορισμό της κλάσης class Test1: def init (self): self.attribute= Test attr obj1=test1() print obj1.attribute Στον κατασκευαστή χρησιμοποιώντας τη δήλωση self class Test2: attribute='test 2 attribute' obj2=test2() print obj2.attribute Χωρίς τον κατασκευαστή και το self

Ορισμός ιδιοτήτων μιας κλάσης Β τρόπος - Ορισμός μιας ιδιότητας έξω από τον ορισμό της κλάσης class Test: attr1='this is the 1st attribute' obj1=test() obj1.attr2= Second attribute Έξω από τον ορισμό της κλάσης print obj1.attr1 print obj1.attr2

Μέθοδοι Οι μέθοδοι στην Python είναι σημασιολογικά ίδιες με τις συναρτήσεις αλλά έχουν δύο σημαντικές διαφορές: Οι μέθοδοι ορίζονται μόνο μέσα στον ορισμό της κλάσης Η κλήση μιας μεθόδου είναι διαφορετική από την κλήση μιας συνάρτησης class exam: color='yellow' def my_print(self): print This color is, self.color obj1=exam() obj1.my_print() obj1.color='red' obj1.my_print() obj1.weight=80 print obj1.color, object1.weight Αντικείμενο. Μέθοδος() για την πρόσβαση σε μια μέθοδο ενός αντικειμένου

@staticmethod Μερικές φορές το αποτέλεσμα της κλήσης μιας μεθόδου είναι το ίδιο σε όποιο αντικείμενο και αν κληθεί. Μελετήστε το παρακάτω παράδειγμα. class Dog: def init (self, color, size): self.color=color self.size=size def bark(self): print 'I am barking' obj1=dog('white','small') obj2=dog('black','large') class Dog: def init (self, color, size): self.color=color self.size=size @staticmethod def bark(): print 'I am barking' obj1=dog('white', 'small') obj2=dog('black', 'large') obj1.bark() obj2.bark() Και οι δύο σκύλοι απλά θα γαβγίζουν, οπότε η παράμετρος self είναι περιττή!!! #Η μέθοδος δουλεύει σε επίπεδο κλάσης Dog.bark() #αλλά και σε οποιοδήποτε αντικείμενο της κλάσης obj1.barκ() obj2.bark()

@staticmethod Oι στατικές μέθοδοι είναι: Απλές συναρτήσεις χωρίς το όρισμα (παράμετρο) self, Είναι όμως τοποθετημένες απαραίτητα μέσα στον ορισμό της κλάσης, Μπορούν να κληθούν και από την κλάση και από το αντικείμενο της, Το αποτέλεσμα τέτοιων μεθόδων είναι ανεξάρτητο της κατάστασης του αντικειμένου, Βοηθούν στην ευαναγνωσιμότητα του κώδικα, Δημιουργούνται με τη δήλωση @staticmethod. Οι στατικές μέθοδοι είναι ειδικές μέθοδοι που περιγράφουν κώδικα που ανήκει μεν στην κλάση αλλά δεν χρησιμοποιεί καθόλου τα αντικείμενα της

Σε αντίθεση με τις στατικές μεθόδους, οι μέθοδοι κλάσης έχουν πάντα ως πρώτη παράμετρο την κλάση που τις περιέχει χρησιμοποιώντας τη δήλωση cls. Περιγράφουν κώδικα που ανήκει σε μια κλάση ο οποίος χρημοποιεί / τροποποιεί τις ιδιότητες των αντικειμένων της. Το διπλανό παράδειγμα περιγράφει μια μέθοδο κλάσης η οποία επιστρέφει πόσες φορές ορίστηκαν στιγμιότυπα της κλάσης χρησιμοποιώντας την ιδιότητα plithos. @classmethod class Dog: plithos=0 def init (self,size, color) self.size=size self.color=color Dog.plithos +=1 @classmethod def get_plithos(cls): return cls.plithos Obj1=Dog( small, black ) Dog.get_plithos() Obj2=Dog( small, brown ) print Dog.get_plithos()