繁体   English   中英

Python:如何从同一类的类方法调用实例方法

[英]Python: How to call an instance method from a class method of the same class

我的课如下:

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)

有没有办法做到这一点? 谢谢

不,没有实例,您不能也不应从类中调用实例方法。 这将是非常糟糕的 但是,您可以从和实例方法中调用类方法。 选项是

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

另外,您可能对AttrDict感兴趣,因为这看起来像您要尝试执行的操作。

在将类方法当作实例方法对待并将类添加为实例时,可以使用classmethod调用实例方法。 IMO这确实是一个坏习惯,但是可以解决您的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM