我有两类继承层次结构:
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)如果没有,我如何更好地构造继承层次结构,同时仍然通过
corpus
和model
函数(由我的主要逻辑使用)提供相同的API。 最佳答案
您可以通过从类获取对描述符的引用,然后调用描述符的__get__
方法来invoke descriptors directly:
TfIdfSimilarity.model.__get__(self)
如果您发现自己经常这样做,则可能表明您应该使用常规方法而不是属性。
关于python - 在Python中调用方法的当前类版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56078640/