Python: Cómo llamar a un método de instancia desde un método de clase de la misma clase

Tengo una clase de la siguiente manera:

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) 

Y me gustaría poder hacer:

 >>> obj = MyClass.new() >>> obj.int # must be defined 9 

Quiero decir, sin crear una nueva instancia de MyClass , pero obviamente no es tan simple, porque llamar a MyClass.new() lanza TypeError: unbound method get_params() must be called with MyClass instance as first argument (got nothing instead)

¿Hay alguna manera de lograrlo? Gracias

No, no puede y no debe llamar a un método de instancia desde una clase sin una instancia. Esto sería muy malo . Puede, sin embargo llamar, un método de clase y un método de instancia. Las opciones son

  1. get_param un método de clase y arregla las referencias a él
  2. tener __init__ llamada get_param , ya que es un método de instancia

También puedes estar interesado en un AttrDict ya que parece ser lo que estás tratando de hacer.

Puede llamar al método de instancia con classmethod cuando lo trata como método de instancia y agregar clase como instancia. En mi opinión, es una mala práctica, pero resuelve tu problema.

 @classmethod def new(cls): params = cls.get_params(cls) return cls(**params)