I have a class as follows:
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)
and I would like to be able to do:
>>> obj = MyClass.new()
>>> obj.int # must be defined
9
I mean without creating a new instance of MyClass
, but obviously it's not that simple, because calling MyClass.new()
throws TypeError: unbound method get_params() must be called with MyClass instance as first argument (got nothing instead)
Is there any way to accomplish so? Thanks
You can call instance method with classmethod when treating it like instance method and add class as instance. IMO it is really bad practice, but it solves your problem.
No, you can't and shouldn't call an instance method from a class without an instance. This would be very bad. You can, however call, a class method from and instance method. Options are
get_param
a class method and fix references to it__init__
callget_param
, since it is a instance methodAlso you may be interested in an AttrDict since that looks like what you are trying to do.