Ciao ragazzi
Primo test:
definisco due funzioni nella classe:
una con un parametro, l’altra senza.
Quella senza parametro posso richiamarla solo con la classe.
Quella col parametro posso richiamarla solo con un oggetto.
class ben:
def hi():
print( 'HI' )
def hello( self ):
print( 'HELLO' )
ben1 = ben()
ben.hi()
ben1.hello()
risulta
python3 t.py
HI
HELLO
se gli dico
ben1.hi()
risulta
Traceback (most recent call last):
File “t.py”, line 13, in
ben1.hi()
TypeError: hi() takes 0 positional arguments but 1 was given
se gli dico
ben.hello()
risulta
Traceback (most recent call last):
File “t.py”, line 13, in
ben.hello()
TypeError: hello() missing 1 required positional argument: ‘self’
Secondo test:
Provo a passare delle funzioni al costruttore, come da prova di Salvio:
def esthi():
print( 'HI' )
def esthello( self ):
print( 'HELLO' )
class sam:
def __init__( self, funhi, funhello ):
self.hi = funhi
self.hello = funhello
sam1 = sam( esthi, esthello )
sam1.hi()
sam1.hello( 0 )
risulta
HI
HELLO
e devo dare un parametro a hello(), se no da’ errore:
Traceback (most recent call last):
File “s.py”, line 15, in
sam1.hello()
TypeError: esthello() missing 1 required positional argument: ‘self’
Se pero’ provo a richiamare le funzioni come attributi della classe, da’ errore
sam.hello( 0 )
sam.hi()
Traceback (most recent call last):
File “s.py”, line 18, in
sam.hi()
AttributeError: type object ‘sam’ has no attribute ‘hi’
Traceback (most recent call last):
File “s.py”, line 17, in
sam.hello( 0 )
AttributeError: type object ‘sam’ has no attribute ‘hello’
A me pare che le funzioni che ‘attribuisci’ alla classe diventano metodi, per cui il primo parametro e’ riservato all’oggetto e le usi normalmente come metodi.
Quelle che ‘attribuisci’ a un oggetto sono delle funzioni normali,
che puoi richiamare dall’oggetto (essendo sui attributi), ma che la classe ignora completamente.
… Mi sembra che ci sia una logica … 
… O no ? 
EDIT
Certo, nel primo test, posso richiamare il metodo dalla classe, ma devo dargli un parametro.
(Che dovrebbe essere un oggetto della classe, ma qui il metodo non lo usa …
)
ben.hello( 0 )
cosi’ funziona anche