Topic: TypeError: missing 1 required positional argument: 'self'  (Letto 57 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Gatt88

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Ciao a tutti.

non riesco a capire come far partire una funzione all'interno di una classe. Mi da sempre l'errore in oggetto "TypeError: missing 1 required positional argument: 'self'"
Mi spiegate il motivo?

Grazie


class prova():

    def funzione(self):
        print("qualcosa")

   funzione()

Offline nuzzopippo

  • python habilis
  • **
  • Post: 56
  • Punti reputazione: 0
    • Mostra profilo
Re:TypeError: missing 1 required positional argument: 'self'
« Risposta #1 il: Maggio 23, 2019, 13:38 »
In primo luogo, il codice che hai postato non dovrebbe neanche essere accettato in una sessione di shell

Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> class Prova:

def funzione(self):
print('Qualcosa')
funzione()


Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    class Prova:
  File "<pyshell#21>", line 5, in Prova
    funzione()
TypeError: funzione() missing 1 required positional argument: 'self'


Ciò perché la chiamata di "funzione()" non ha riferimenti all'interno dell'oggetto (classe) in cui risiede ... ma non è questo l'errore che Tu indichi, supposto di porre una strutturazione di classe accettabile, il Tuo errore lo si riceve provando ad applicare direttamente la classe, bisogna prima istanziarla e poi richiamare il metodo di classe "funzione()", vedi sotto

>>> class Prova:
def funzione(self):
print('Qualcosa')


>>> Prova.funzione()
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    Prova.funzione()
TypeError: funzione() missing 1 required positional argument: 'self'
>>> my_ogg = Prova()
>>> my_ogg.funzione()
Qualcosa
>>>

Probabilmente sei ai primi approcci, suggerirei di partire da qui e seguenti, farsi i concetti generali sulle classi e riprovare, ti sarà utile :)

[Edit] dimenticavo, non necessariamente la classe istanziata deve essere assegnata, va bene anche un utilizzo del genere :

>>> Prova().funzione()
Qualcosa
>>>

che istanzia la classe Prova e richiama il metodo "funzione()" in unica soluzione
« Ultima modifica: Maggio 23, 2019, 13:49 da nuzzopippo »