Python的:如何从同一个类中的一个方法调用一个实例方法(Python: How to call

2019-09-02 04:35发布

我有一个类,如下所示:

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)

我希望能够做到:

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

我的意思是没有创建的新实例MyClass ,但显然它不是那么简单,因为调用MyClass.new()抛出TypeError: unbound method get_params() must be called with MyClass instance as first argument (got nothing instead)

有没有什么办法来实现呢? 谢谢

Answer 1:

不,你不能和不应调用从一个类的实例方法没有一个实例。 这将是非常糟糕的 。 但您可以打电话,从类方法和实例方法。 选项

  1. get_param一个类的方法,并修复它引用
  2. __init__调用get_param ,因为它是一个实例方法

你也可能有兴趣在AttrDict因为看起来像你正在尝试做的。



Answer 2:

像实例方法治疗时,它可以调用实例方法与类方法并添加类的实例。 IMO实在是不好的做法,但它解决您的问题。

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


文章来源: Python: How to call an instance method from a class method of the same class