Προγραμματίζω σε python εδώ και 5 χρόνια και πριν λίγο καιρό παρατήρησα κάτι το οποίο δεν το γνώριζα και πραγματικά μου δημιουργούσε τρομερά λογικά λάθη. Για αυτό σκέφτηκα να κάνω ένα post ώστε όσοι δεν το γνωρίζουν να το μάθουν.
Όταν χρησιμοποιείτε αντικειμενοστραφή προγραμματισμό με python όποτε αλλάζετε μια μεταβλητή
μιας κλάσης πάντα να το κάνετε μέσω μεθόδων.
Ο λόγος είναι ο εξής:
Ας πούμε ότι έχω την κλάση:
class MyClass:
def __init__(self):
self.name = "A Name"
και ότι το
obj είναι ένα αντικείμενο αυτής της κλάσης.
Για να αλλάξω την τιμή του
name μπορώ να κάνω το εξής:
Ας πούμε όμως ότι έκανα λάθος και έγραψα :
Αντί για
name έγραψα
nama. Αν και οι περισσότεροι θα περιμένετε να πετάξει error, αυτό που θα γίνει στην ουσία είναι ότι θα δημιουργηθεί μια νέα μεταβλητή κατά την εκτέλεση του προγράμματος με το όνομα
nama. Επομένος ενώ εσείς περιμένατε να αλλάξετε την τιμή του obj.name στην ουσία δημιουργήσατε μια νέα, με όνομα
obj.nama.
Επομένως βλέπετε πόσο εύκολο είναι στην python, να κάνεις ένα τέτοιο λογικό λάθος χωρίς να το θέλεις.
Επειδή το πάθαινα συχνά, αποφάσισα να κάνω το εξής:
Θα χρησιμοποιώ μεθόδους για να γράφω τις μεταβλητές κλάσεων, ενώ για να τις διαβάσω θα χρησιμοποιώ απευθείας το όνομα.
πχ
class MyClass:
def __init__(self):
self.name = "A Name"
def setName(self, new_name):
self.name = new_name
obj = MyClass()
obj.setName("Nikos")
print(obj.name)
Πιστεύω είναι κάτι πολύ χρήσιμο να το έχετε υπόψη σας γιατί είναι κάτι πολύ
λεπτό το οποίο δεν ισχύει σε άλλες αντικειμενοστραφής γλώσσες όπως η java.