Python super class / sub class 无限循环

Python super class / sub class infinite loop

我是一名学生,刚接触 Python。我有以下代码:

class A:
  ...

  def fit(self, X, y):
     ...
     return self

  def transform(self, X):
    ...
    return transformed_X

  def fit_transform(self, X, y):
    return self.fit(X, y).transform(X)

class B(A):
  ...

  def fit(self, X, y):
    transformed_X = super().fit_transform(X, y)
    ...

我认为这会导致无限循环(BA 中调用 fit_transform,然后在 B 中再次调用 fit 等)。这个对吗?我该如何解决这个问题?我希望在 B 中调用 super().fit_transform(X, y) 到 return 如果对象只是类型 A.

会怎样

谢谢。

正如您所指出的,super().fit_transform(X, y) 等同于 A.fit_transform(self, X, y) 调用 self.fit 并且 self 是 B 的一个实例。因此无限递归。

一种方法是 hard_code A.fitA.fit_transform 中的用法:

class A:
    
    def fit(self, X, y):
        print("A fit")
        return self

    def transform(self, X):
        print("A transform")
        return "here we are"

    def fit_transform(self, X, y):
        print("A fit_transsform")
        return A.fit(self, X, y).transform(X)

class B(A):
  

  def fit(self, X, y):
    print("B fit")
    transformed_X = super().fit_transform(X, y)
    return transformed_X

打印:

B fit
A fit_transsform
A fit
A transform
'here we are'

但是这段代码非常丑陋,您的 classes/methods 可能设计不当(可能是组合而不是继承,因为 B 似乎 使用 A 而不是 成为一个A)