python:为第三方类编写包装器

2024-06-08 05:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要第三方模块m的类X的一些功能。我可以直接使用m.X,但是将来可能需要用另一个n.Y类来替换m.X(例如,如果我发现更好的实现)。在

我希望避免在这种情况下更改其余代码。在

现在,我希望m.X的完整接口,包括初始化,保持不变。我为m.X写了一个包装W,如下所示:

class W(m.X):
    def __init__(self, *args):
        super().__init__(*args)

将来,如有需要,我计划将上述内容改写为:

^{pr2}$

我现在的m.X包装纸可以接受吗?是不是有问题,或者纽约的包装有问题?在


Tags: 模块代码self功能内容initdef情况
3条回答

你可以简单地使用

class W(m.X):
    pass

默认情况下继承m.X.__init__()。在

最简单的方法是:

W = m.X

实际上,Python中的所有东西都是一类对象,包括类型。类与任何其他变量几乎无法区分,例如:

^{pr2}$

可以实例化m.X的一个实例,同时显示W是它的实际名称。(请注意,使用此方法,isinstance将无法正常工作-它将在第一个示例中正常工作。)

在某些情况下,使用赋值可能无法很好地与ide配合使用。在这种情况下:

class W(m.X): pass

也会产生相同的结果,不过由于W的实例只是m.X的实例,因为W是一个子类:使用W=m.X; W(args)将创建{}的实例。在

这将取决于你使用的m.X和n.Y在他们的方法上有多大的不同,但它可以简单到

try:
    import n.Y as foo
except ImportError:
    import m.X as foo

class W(foo):
    pass

因此,您的代码会自动反映新模块,这可能会使您需要在整个代码库中所做的更改最小化。在

相关问题 更多 >

    热门问题