在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一样吗?
答案 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
(例如,包含Lion
和Tiger
)myzoo/foods/__init__.py
(空)myzoo/foods/base.py
(包含您的Food
基类)myzoo/foods/kibbles.py
(包含猫的粗磨,而不是他们会喜欢的)(每个动物/食物也可以有一个文件,如果你预计它们会变大,也可能应该这样。)