将现有功能添加到子类

Adding existing function to subclass

我正在制作一些需要实现 run 方法的子 classes。它们都遵循一个模式:

from mylib import transformation_function_1
from mylib import transformation_function_2

def SubClass1(ParentClass):
    def run(self):
        subclass_data = transformation_function_1(self.parent_data)
        # Some other fixed logic.

def SubClass2(ParentClass):
    def run(self):
        subclass_data = transformation_function_2(self.parent_data)
        # Some other fixed logic.

我是否可以在中间class中提取这个逻辑?是这样的吗?

from mylib import transformation_function_1
from mylib import transformation_function_2

def TransformationBase(ParentClass):

    @abstractclassmethod
    def transformation_function():
        raise NotImplementedError

    def run(self):
        subclass_data = transformation_function(self.parent_data)
        # Some other fixed logic.

def SubClass1(TransformationBase):
    transformation_function = transformation_function_1

def SubClass2(TransformationBase):
    transformation_function = transformation_function_2

谢谢!

您可以这样做:

class SubClass(TransformationBase):
  def transformation_function(*args, **kwargs):
    return transformation_function1(*args, **kwargs)

特殊函数staticmethod允许将局部方法声明为静态的。假设你想声明 类 并且你希望 sub类 使用 external 自由函数,你可以这样做:

>>> class TransformationBase:

    def transformation_function():
        raise NotImplementedError

    def run(self):
        subclass_data = self.transformation_function(self.parent_data)
        # Some other fixed logic.


>>> def transformation_function_1(data):
    print('F1', data)


>>> def transformation_function_2(data):
    print('F2', data)
    return 2

>>> class SubClass1(TransformationBase):
    transformation_function = staticmethod(transformation_function_1)
    parent_data = "P1"


>>> c1 = SubClass1()
>>> c1.run()
F1 P1
>>>