Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将现有函数添加到子类_Python_Subclass - Fatal编程技术网

Python 将现有函数添加到子类

Python 将现有函数添加到子类,python,subclass,Python,Subclass,我正在创建一些需要实现run方法的子类。它们都遵循一种模式: 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

我正在创建一些需要实现run方法的子类。它们都遵循一种模式:

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.
在一个中级课堂上,我是否可以得出这个逻辑?像这样的

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允许将本地方法声明为静态。假设您希望声明类,并且希望子类使用外部自由函数,您可以执行以下操作:

>>> 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
>>> 

所以你的问题是每个子类应该实现的函数已经在别处定义了,你想重用它们吗?我认为你应该在子类中实现函数,然后从中调用相应的外部函数。。。