El_Sonador Δημοσ. 10 Μαΐου 2013 Δημοσ. 10 Μαΐου 2013 καλησπέρα σε ολους ασχολούμαι εδω και λίγο καιρό με την Python και έχω την εξής ερώτηση 1)γιατι σε μια κλάση στις συναρτήσεις παντα πρεπει να έχουμε μια παράμετρο self 2)που χρησιμευεί αυτη η γραμμη self.value = value {για παράμετρο ονοματι value} ευχαριστώ πολύ
MeTaXaS4 Δημοσ. 10 Μαΐου 2013 Δημοσ. 10 Μαΐου 2013 διαβάζοντας εδώ http://stackoverflow.com/questions/2709821/python-self-explained αυτό που κατάλαβα είναι εν μέρη σαν τον this της C/C++ απλά περνάει σαν παράμετρο στις μεθόδους των κλάσεων ώστε να έχεις πρόσβαση σε αυτόν. Όσο για το 2 αν είχες απλώς το name def myFunc( name): name = name όπως βλέπεις παραπάνω δεν θα μπορούσες να κάνεις την "εκχώρηση". Ίσως αντί διαβάσεις όλο το Post το άλλο αν δεις μόνο τον κώδικα Site: http://stackoverflow.com/a/6433556">αυτόν να μπορέσει να σου λυθεί η απορία.
Erevis Δημοσ. 10 Μαΐου 2013 Δημοσ. 10 Μαΐου 2013 1) self είναι αναφορά στο ίδιο το αντικείμενο για το οποίο καλείται μια μέθοδος (συνάρτηση της κλάσσης του αντικειμένου). πες ότι έχεις την κλάσση foo με μέθοδο bar(self, x). όταν γράφεις: obj = foo() obj.bar(10) o interpreter αναλαμβάνει να καλέσει την bar ως: bar(obj, 10) H λογική για το ότι το self πρέπει να υπάρχει σαν παράμετρος στη μέθοδο έχει να κάνει με τη γενικότερη λογική που φτιάχτηκε η Python -> "Explicit is always better than implicit". Πχ στη C++ μια μέθοδος υλοποιείται από τον compiler προσθέτοντας το thιs όρισμα στις παραμέτρους (το λέω αρκετά μπακαλίστικα). 2) Όταν γράφεις self.value αναφέρεσαι σε ένα attribute της κλάσσης που ονομάζεται value, το σκέτο value είναι το όρισμα της μεθόδου. 1
iceblade Δημοσ. 10 Μαΐου 2013 Δημοσ. 10 Μαΐου 2013 Στην Python, το πρώτο argument σε μια instance method είναι πάντοτε το ίδιο το instance της κλάσης. Περνάμε δηλαδή το instance της κλάσης explicitly κάθε μέθοδο (εκτός αν έχουμε να κάνουμε με class ή static methods). Σα σύμβαση, το όρισμα αυτό το ονομάζουμε self. Αυτό έχει καθιερωθεί ως σύμβαση, δεν είναι όμως απαραίτητο (είναι όμως καλη πρακτική που συνίσταται να εφαρμόζεται). Επομένως, όταν γράφεις self.value αναφέρεσαι στη μεταβλητή value του συγκεκριμένουν instance, όταν γράφεις απλά value αναφέρεσαι στη local variable value. To self είναι το αντίστοιχο του "this" της C++/C#/Java.
albNik Δημοσ. 10 Μαΐου 2013 Δημοσ. 10 Μαΐου 2013 To self στη μέθοδο bar(self, x) φαινεται είναι ίδιο με το this στις extension methods της c# 3.0. http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx
El_Sonador Δημοσ. 10 Μαΐου 2013 Μέλος Δημοσ. 10 Μαΐου 2013 Ευχαριστώ πολυ παιδια διαβαζοντας το self explanation και τις δικές σας εξηγήσεις νομίζω οτι κατάλαβα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα