对于上下文,我正在构建一个从任意页面创建RSS源的框架。它的工作方式是我有一个基础类,有很多设置,并希望插入描述返回项目的生成器;然后我创建了这个类的一个实例。我可以想到两种方法:
1)创建一个派生类,覆盖所有相关的属性和方法,然后创建它的实例:
class Base:
property = None
def customizable_function(self, many, different, arguments):
raise NotImplementedError()
def __init__(self):
non_customizable_preparation()
customizable_function(1, 2, 3)
class Derived:
property = "useful"
def customizable_function(self, many, different, arguments):
do_stuff()
Derived()
2)不要创建第二个类,使init函数采用所有相关参数:
class Base:
def __init__(self, customizable_function, property):
non_customizable_preparation()
customizable_function(1, 2, 3)
def function_that_will_be_passed(self, many, different, arguments):
do_stuff()
Base(function_that_will_be_passed, property="useful")
第二种方法似乎更清晰,但在其中customizable_function
必须在类之外定义,同时使其符号与预期匹配。是否存在一些非显而易见的问题,使其中一种方法明显改善?或者这是一个坏主意,我应该采取不同的做法?