2017-09-06 3 views
0

Die Funktion my_func erhält ein Argument, das ganze oder eine Klasse sein könnte:Python - Wie Bewertung von Klassenobjekt explizit ändern?

class SomeClass: 
    val = 0 
    def __init__(self): 
     self.val = 0 
    def set(self, val): 
     self.val = val 
    def get(self): 
     return self.val 

und ich möchte mit beiden Typen als arbeiten. Kann ich Python irgendwie explizit mitteilen, dass die Auswertung eines Objekts vom Typ SomeClass das Feld val des Objekts zurückgeben soll, aber nicht das Objekt selbst.

Das bedeutet, die folgenden Code Arbeit (irgendwie) zu erhalten:

s = SomeClass() 
s.set(3) 
test = s # this line should assign value 3(int) to test 
test # prints 3 

Antwort

0

Nicht wirklich, nein, nicht im weitesten Sinne, die Sie zu fragen scheinen. Sie können viele Operationen überladen, nicht die Zuweisung. Das liegt daran, dass die Variablen nur Verweise auf Objekte sind und keinen Typ angehängt haben. Zu jeder Zeit kann es viele Hinweise auf Ihr Objekt geben. Es zählt , wie Sie das Objekt verwenden, nicht was Sie ihm zugewiesen haben.

Stattdessen würde ich Ihre Klasse in eine ganze Zahl konvertierbar machen. Sie können dies mit der object.__int__ hook; Ihre Setter würde in explizit int() auf das Objekt aufrufen geben:

class SomeClass: 
    val = 0 
    def __init__(self): 
     self.val = 0 
    def set(self, val): 
     self.val = int(val) 
    def get(self): 
     return self.val 
    def __int__(self): 
     return self.val 

Wenn Sie immer diese Objekte in Integer-Arithmetik verwenden, können Sie Haken für diese Vorgänge, wie object.__add__ und object.__sub__ hinzufügen könnte; Wiederum ist es der Kontext, in dem das Objekt verwendet wird.

+0

Dank Martijn scheint es Vorrang __int__ Methode ist was ich brauche. Wenn mein arg1 könnte sein, oder integer oder Someclass-Objekt mit implementierter __int__ Methode, also wenn ich tue: my_arg = int (arg1) Ich werde den Integer-Wert sowieso bekommen und dann kann ich mit my_arg arbeitet nur. –

Verwandte Themen