如何在Python中扩展(继承)模块?

时间:2014-01-29 14:42:29

标签: python inheritance module code-reuse

所以我听说模块非常pythonic,我用模块构建我的代码很多,避免了类。

但是现在我正在编写一个模块Formula,它与模块Car具有许多相同的功能。我该怎么处理?

  • 两个模块中的代码重复?
  • 转换为课程?
  • 重构代码以添加第三个父模块Vehicle并导入我需要的方法和变量?

第三个看起来不错,我看到的唯一缺点是有一些特定于模块的变量(例如top_speed),但父模块Vehicle中的函数需要访问这些特定变量。

5 个答案:

答案 0 :(得分:1)

模块有时可用于实现单例,但它们并不意味着替代类。您只能导入模块一次,而类可以有多个实例。

如果您需要继承,请使用类。

答案 1 :(得分:1)

模块是一个实例,而不是一个类,所以你不能继承它,只能继承6

如果你的东西有状态,你应该有课程,而不是模块。

如果你有两个模块需要相同的东西,那么要么a)其中一个应该拥有它而第二个应该使用第一个,或者b)它们都应该从第三个模块获得它。

模块名称通常是小写的,因为Uppercase / CamelCase名称表示类。

答案 2 :(得分:0)

class Base():
    .....

class derived(Base):
    ......

但这是继承课......

答案 3 :(得分:0)

我想从模块继承,并且做到了:

import json

class custom_json(): pass

for i in json.__all__:
    setattr(custom_json, i, getattr(json, i))

至少有效。

如果您要覆盖某些属性,请使用它:

import json

class custom_json():
    def dump():
        pass

for i in json.__all__:
    if not hasattr(custom_json, i):
        setattr(custom_json, i, getattr(json, i))

答案 4 :(得分:-2)

让我举个例子:

<强> Base.py

import os
import sys
config = dict()
config['module_name'] = "some_xyz_thing"
config['description'] = "Implements xyz functionality"

<强> Derived.py

from Base import config
config['module_name'] = "som_more_xyz_functionality"

这样您就可以在模块级别使用继承