Sto cercando di creare una classe che restituisca un valore, non self.
Ti mostrerò un esempio di confronto con un elenco:
>>> l = list()
>>> print(l)
[]
>>> class MyClass:
>>> pass
>>> mc = MyClass()
>>> print mc
<__main__.MyClass instance at 0x02892508>
Ho bisogno che MyClass restituisca un elenco, come fa list()
, non le informazioni sull'istanza. So che posso creare una sottoclasse di list. Ma c'è un modo per farlo senza sottoclassi?
Voglio imitare una lista (o altri oggetti):
>>> l1 = list()
>>> l2 = list()
>>> l1
[]
>>> l2
[]
>>> l1 == l2
True
>>> class MyClass():
def __repr__(self):
return '[]'
>>> m1 = MyClass()
>>> m2 = MyClass()
>>> m1
[]
>>> m2
[]
>>> m1 == m2
False
Perché m1 == m2
è falso? Questa è la domanda.
Mi dispiace se non rispondo a tutti voi. Sto provando tutte le soluzioni che mi dai. Non posso usare def
, perché ho bisogno di usare funzioni come setitem, getitem, ecc.
- Harry Hache
Se quello che vuoi è un modo per trasformare la tua classe in una specie di elenco senza sottoclassi list
, allora crea un metodo che restituisca una lista:
def MyClass():
def __init__(self):
self.value1 = 1
self.value2 = 2
def get_list(self):
return [self.value1, self.value2...]
>>>print MyClass().get_list()
[1, 2...]
Se intendevi che print MyClass()
stamperà un elenco, sostituisci semplicemente __repr__
:
class MyClass():
def __init__(self):
self.value1 = 1
self.value2 = 2
def __repr__(self):
return repr([self.value1, self.value2])
MODIFICA:
Vedo che intendevi come creare oggetti confronti. Per questo, sostituisci il metodo __cmp__
.
class MyClass():
def __cmp__(self, other):
return cmp(self.get_list(), other.get_list())