Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σας!

Δυσκολεύομαι στο να καταλάβω τι είναι το self στην Python.

Μπορεί κάποιος να μου το εξηγήσει και με παραδείγματα αν γινετε;

Δημοσ.

Καλησπέρα σας!

Δυσκολεύομαι στο να καταλάβω τι είναι το self στην Python.

Μπορεί κάποιος να μου το εξηγήσει και με παραδείγματα αν γινετε;

Ξέρεις καθόλου Java ή C++ ή είναι η πρώτη σου επαφή με αντικειμενοστραφή προγραμματισμό;

Δημοσ.

Για να στο εξηγήσει κάποιος σε layman terms θέλει ολόκληρο κατεβατό. Από που διαβάζεις; πρακτικά δεν υπάρχει βιβλίο που να μην το εξηγεί.

Δημοσ.

Έχω ξεκινήσει από χθες να μαθαίνω με ότι έχει να κάνει με class στην Python και δεν έχω καταλάβει σχεδόν τίποτα.

Δημοσ.

Βασικά αυτό που έχει σημασία είναι να καταλάβεις πότε και πως να το χρησιμοποιείς όταν γράφεις κλάσσεις.

 

Με δικά μου λόγια και να με συγχωρέσουν οι ειδικοί είναι ένα δείκτης στο αντικείμενο που θα δημιουργηθεί 

Το όνομα self είναι συμβατικό θα μπορούσε να είναι οτιδήποτε.

 

Ο παρακάτω κώδικας ίσως σε φωτίσει λίγο

>>> class Kati:
	def self_(self):
		print(type(self))
		print(id(self))

>>> antikeimeno=Kati()

>>> type(antikeimeno)
<class '__main__.Kati'>
>>> id(antikeimeno)
1720389913568

>>> antikeimeno.self_()
<class '__main__.Kati'>
1720389913568

Αν προσέξεις το self και το antikeimeno έχουν το ίδιο id και τον ίδιο τύπο.

 

Από την στιγμή όμως που ξεκίνησες χθες με κλάσεις προχώρα το λίγο ακόμα και θα το καταλάβεις

https://docs.python.org/3/tutorial/classes.html

http://www.python-course.eu/python3_object_oriented_programming.php

 

Να συμπληρώσω ότι όταν καλείς μεθόδους δεν χρειάζεται να το γράφεις στις παραμέτρους η python το καλεί μόνη της (magic!) 

Δημοσ.

Μόλις τώρα το κατάλαβα,το έβλεπα και σε κάποια βίντεο που έλεγαν ότι το self είναι το object και είχα κολλήσει τόσο πολύ αλλά με το παράδειγμα σου πραγματικά με φώτισες,σε ευχαριστώ πάρα πολύ! :)

Δημοσ.

Χαίρομαι

 

Όταν καταλάβεις τις κλάσσεις αν θες ψάξτο παραπέρα

Δες τι γίνεται αν δεν βάλεις το self (συνήθισμένο λάθος) έχει ενδιαφέρον

>>> class Kati1:
	def func1():
		print('hello')
		
>>> ant1=Kati1()
>>> ant1.func1()
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    ant1.func1()
TypeError: func1() takes 0 positional arguments but 1 was given
>>> 

Λέει ότι δώσαμε ένα argument, ενώ δεν δώσαμε κανένα, και ψάχνεσαι και δεν βρίσκεις το λάθος σου

 

Είναι επειδή βάζει μόνη της το self ασ μην το ορίσαμε πουθενά.

Δημοσ.

Χαίρομαι

 

Όταν καταλάβεις τις κλάσσεις αν θες ψάξτο παραπέρα

Δες τι γίνεται αν δεν βάλεις το self (συνήθισμένο λάθος) έχει ενδιαφέρον

>>> class Kati1:
	def func1():
		print('hello')
		
>>> ant1=Kati1()
>>> ant1.func1()
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    ant1.func1()
TypeError: func1() takes 0 positional arguments but 1 was given
>>> 

Λέει ότι δώσαμε ένα argument, ενώ δεν δώσαμε κανένα, και ψάχνεσαι και δεν βρίσκεις το λάθος σου

 

Είναι επειδή βάζει μόνη της το self ασ μην το ορίσαμε πουθενά.

 

Όχι ακριβώς. Αυτό που συμβαίνει έιναι ότι όταν γράφεις ant1.func1() στην ουσία το ant1 πάει σαν πρώτο argument στο func1(), το οποίο έχεις ορίσει ότι δεν παίρνει arguments. Γιαυτό κ σου γράφει: "takes 0 positional arguments but 1 was given"

Ουσιαστικά όταν γράφεις ant1.func1() είναι σα να γράφεις Kati1.func1(ant1). Το πρώτο argument δλδ είναι το instance (το ant1 στην προκειμένη περίπτωση), το οποίο στα instance methods κατά σύμβαση το λέμε "self".

  • Like 1
Δημοσ.

Είχα γράψει παλιότερα κάποια πραγματάκια για κλάσεις εδώ, αλλά για Java. Δε σε νοιάζει. Διάβασέ το κρατώντας τους όρους και βλέποντας τον κώδικα ίσα-ίσα για να ακολουθήσεις το παράδειγμα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

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

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...