Domanda

Sono nuovo di Python. Stavo cercando di definire ed eseguire una semplice funzione in una classe.

Qualcuno può dirmi cosa c'è di sbagliato nel mio codice:

class A :
    def m1(name,age,address) :
        print('Name -->',name)
        print('Age -->',age)
        print('Address -->',address)


>>> a = A()
>>> a.m1('X',12,'XXXX')
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    a.m1('X',12,'XXXX')

Io sono sempre sotto l'errore
TypeError: M1 () batte esattamente 3 argomenti posizionali (4 data)

È stato utile?

Soluzione

I metodi di istanza prendono istanza come primo argomento:

class A :
    def m1(self, name,age,address) :
        print('Name -->',name)
        print('Age -->',age)
        print('Address -->',address)

È inoltre possibile utilizzare @staticmethod decoratore per creare funzione statica:

class A :
    @staticmethod
    def m1(name,age,address) :
        print('Name -->',name)
        print('Age -->',age)
        print('Address -->',address)

Altri suggerimenti

Il primo parametro è sempre l'oggetto stesso.

class A :
    def m1(self, name,age,address) :
        print('Name -->',name)
        print('Age -->',age)
        print('Address -->',address)

Per convenzione, metodi in un'istanza di classe ricevono un riferimento a un oggetto come il primo argomento, di nome self.

>>> class A:
...     def m1(self,name,age,address):
...         print('Name -->',name)
...         print('Age -->',age)
...         print('Address -->',address)
...         
>>> a=A()
>>> a.m1('X',12,'XXXX')
('Name -->', 'X')
('Age -->', 12)
('Address -->', 'XXXX')
>>> 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top