Ho una classe come segue:Python: Come chiamare un metodo di istanza da un metodo di classe della stessa classe
class MyClass(object):
int = None
def __init__(self, *args, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
def get_params(self):
return {'int': random.randint(0, 10)}
@classmethod
def new(cls):
params = cls.get_params()
return cls(**params)
e vorrei essere in grado di fare:
>>> obj = MyClass.new()
>>> obj.int # must be defined
9
Voglio dire senza creare una nuova istanza di MyClass
, ma ovviamente non è così semplice, perché chiamare MyClass.new()
genera TypeError: unbound method get_params() must be called with MyClass instance as first argument (got nothing instead)
C'è un modo per farlo? Grazie
Perché non si rende 'get_params' un metodo di classe anche? – BrenBarn
'MyClass' è un esempio,' get_params' rappresenta un metodo ampiamente chiamato da altri metodi ** instance ** nella mia classe, e penso che ci dovrebbe essere un modo per chiamarlo da un metodo class invece di cambiare TUTTO il metodi che attualmente lo chiamano. Grazie comunque :) – Gerard
Cosa fa 'get_params'? Se si tratta di un metodo di istanza, è necessario disporre di un'istanza per chiamarlo. Se non lo fai, probabilmente non dovrebbe essere un metodo di istanza. È possibile chiamare un metodo di istanza da qualsiasi altro ambito, semplicemente fornendo un'istanza della classe come primo argomento esplicito. –