如何在子文件夹中导入类

时间:2018-06-06 13:43:21

标签: python python-3.x

在Python 3.6上

我想在文件夹中组织我的课程。

文件夹类中的ClassX

子文件夹中的Subclass_of_ClassX

MyPackage
    -__init__.py
    -someCode.py
    -folder Classes
        -__init__.py
        -ClassX.py
        -Subfolder SubClasses
            -__init__.py
            -Subclass_of_ClassX.py

Subclass_of_ClassX覆盖了ClassX

中的元素(函数和变量)

问题是:如果我在任何项目上导入ClassX,并且我得到Subclass_of_ClassX的任何实例,并且我想使用任何overriden函数,我是否需要显式导入子类?

或者我可以使用任何子类实例从任何继承的类导入ClassX和abstract,就像它是ClassX一样吗?

3 个答案:

答案 0 :(得分:0)

如果您有课程实例 - 您已经不需要导入任何内容了,因为它已经在其他地方导入了。

答案 1 :(得分:0)

如果从某个地方获得Subclass_of_ClassX的实例,则根本不需要另外导入该类。导入类只会使当前范围(模块)中的名称可用。

您只需在需要时导入类或子类...

  • 创建新实例
  • 写一个子类
  • 使用它,就像在isinstance(obj, ClassX)
  • 中一样

答案 2 :(得分:0)

您所描述的不是构造包装的Pythonic方法。

你最终将不得不做

from mypackage.Classes.ClassX import ClassX

当你可以用

from mypackage.class_x import ClassX

如果您的包裹是,例如,为了您有动物和食物的动物园,我建议将动物放在一个包装中,将食物放在另一个包装中。

  • myzoo/__init__.py(空)
  • myzoo/animals/__init__.py(空)
  • myzoo/animals/base.py(包含您的Animal基类)
  • myzoo/animals/cats.py(例如,包含LionTiger
  • myzoo/foods/__init__.py(空)
  • myzoo/foods/base.py(包含您的Food基类)
  • myzoo/foods/kibbles.py(包含猫的粗磨,而不是他们会喜欢的)

(每个动物/食物也可以有一个文件,如果你预计它们会变大,也可能应该这样。)

相关问题