Как расширить (наследовать) модуль в Python?

Поэтому я слышал, что модули очень питонны, и я много структурирую свой код, избегая классов.

Но сейчас я пишу модуль Formula который имеет много той же функциональности, что и модуль Car, Как мне справиться с этим?

  • Дублировать код в обоих модулях?
  • Преобразовать в классы?
  • Рефакторинг кода для добавления третьего, родительского модуля Vehicle и импортировать методы и переменные, которые мне нужны?

Третий выглядит хорошо, единственный недостаток, который я вижу, это то, что есть некоторые переменные, которые являются специфическими для модуля (например, top_speed), но функции в родительском модуле Vehicle должны получить доступ к этим конкретным переменным.

4 ответа

Модуль является экземпляром, а не классом, поэтому вы не можете наследовать от него больше, чем можете наследовать от 6,

Если у ваших вещей есть состояние, у вас должны быть классы, а не модули.

Если у вас есть два модуля, которые нуждаются в одинаковом материале, то это либо a) один из них должен иметь его, а второй должен использовать первый, либо b) они оба должны получить его из третьего модуля.

Имена модулей обычно в нижнем регистре, так как имена в верхнем регистре /CamelCase указывают классы.

Модули могут иногда использоваться для реализации Singletons, но они не предназначены для замены классов. Вы можете импортировать модуль только один раз, в то время как класс может иметь несколько экземпляров.

Если вам нужно наследование, используйте класс.

Я хотел унаследовать от модуля, и я это сделал:

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))
class Base():
    .....

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

Но это наследственный класс...

Позволь мне привести пример:

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"

Таким образом, вы можете использовать наследование на уровне модуля

Другие вопросы по тегам