我有两类继承层次结构:

class TfIdfSimilarity(SimilarityModel):
    @property
    def corpus(self):
        return self.model[self._corpus]

    @property
    def model(self):
        return TfidfModel(self._corpus, dictionary=self._dict)


class LsiSimilarity(TfIdfSimilarity):
    @property
    def corpus(self):
        tfidf_corpus = super().corpus
        return self.model[tfidf_corpus]

    @property
    def model(self):
        tfidf_corpus = super().corpus
        return LsiModel(tfidf_corpus)


但是,这会导致无限递归错误,因为每当我尝试获取LsiSimilarity#model时,它都会调用TfIdfSimilarity#corpus,然后尝试访问该模型,从而再次调用LsiSimilarity#model

我真正想要的是TfIdfSimilarity#corpus仅调用TfIdfSimilarity#model,而从不考虑子类的版本。

这在Python中可行吗? (Python 3)如果没有,我如何更好地构造继承层次结构,同时仍然通过corpusmodel函数(由我的主要逻辑使用)提供相同的API。

最佳答案

您可以通过从类获取对描述符的引用,然后调用描述符的__get__方法来invoke descriptors directly

TfIdfSimilarity.model.__get__(self)


如果您发现自己经常这样做,则可能表明您应该使用常规方法而不是属性。

关于python - 在Python中调用方法的当前类版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56078640/

10-12 16:49
查看更多