2017-12-05 1 views
0
class new: 
    i=1 
    def __init__(self): 
     name='sakthi' 

    def add(self,one,two): 
     return one+two 

k=new.add 

print(k) 

Wenn ich das obige Programm ausführen. Ich bekomme function new.add at 0x0068E270 als Ausgabe.Python-Funktion Objekt in Klasse

Kann mir jemand helfen zu verstehen, was passiert ist und welche Art von Operation kann ich mit Wert k tun.

Antwort

1

Der Wert new.add, den Sie k zuweisen, ist eine Funktion. In Python 2 wäre es ein spezielles "ungebundenes Methoden" -Objekt gewesen, aber Ihre Ausgabe legt nahe, dass Sie Python 3 verwenden (wo ungebundene Methoden nicht mehr existieren, außer konzeptionell).

Wie jede Funktion können Sie k nennen, wenn Sie wollen, was Werte vorbei angemessen sind self für, one und two. Zum Beispiel k("foo", 1, 2) (die 3 zurückgibt). Das Argument self sollte traditionell eine Instanz der new-Klasse sein, obwohl es in Python 3 nicht durch irgendetwas erzwungen wird (eine Überprüfung dafür war der Zweck von ungebundenen Methodenobjekten in Python 2). Daher hat es im obigen Beispiel funktioniert, eine Zeichenfolge zu übergeben, da self im Funktionskörper für nichts verwendet wird. (Kompliziertere Methoden schlagen normalerweise fehl, wenn Sie ein unangemessenes Argument als self übergeben.)

Die Methode zum Aufrufen von Methoden besteht normalerweise darin, zuerst eine Instanz einer Klasse zu erstellen und dann die Methode für die Instanz aufzurufen. Dies bewirkt, dass die Instanz als erstes Argument automatisch übergeben werden:

x = new() 
x.add(1, 2) # returns 3, x got passed as self 
+0

drucken wird. Ja. Ich benutze Python 3 –

1

function new.add at 0x0068E270 In CPython, wird die Adresse von k sein. Da k nur eine Funktion ist, können Sie immer noch etwas wie print(k('foo', 1, 2)) tun, die 5