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

问题描述 投票:1回答:5

所以我听说模块是非常pythonic的,我用模块来构造我的代码很多,避免使用类。

但是现在我正在编写一个与模块Formula具有很多相同功能的模块Car。我应该如何处理?

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

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

python inheritance module code-reuse
5个回答
1
投票

有时可以使用模块来实现Singleton,但是它们并不是要替代类。您只能导入一次模块,而一个类可以具有多个实例。

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


1
投票

一个模块是一个实例,而不是一个类,因此您不能从6继承它。

如果您的东西有状态,则应该有类,而不是模块。

[如果您有两个需要相同内容的模块,则要么a)其中一个应具有它,而第二个应使用第一个,或b)他们都应从第三个模块获得它。

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


0
投票
class Base():
    .....

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

但是这是继承的类...


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

-1
投票

让我举个例子:

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"

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

© www.soinside.com 2019 - 2024. All rights reserved.