将现有功能添加到子类
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
>>>
我正在制作一些需要实现 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
>>>