我想知道在包中定义多层类层次结构的正确方法。
例如,说我有这些课程:
class Furniture:
class Table(Furniture):
class Chair(Furniture):
class Armchair(Chair):
等。
在我的调用代码中,我希望能够执行以下操作:
import furniture
my_chair = furniture.chair.Armchair()
my_table = furniture.Table()
我似乎无法理解应该在何处定义什么类定义和导入-既可以使我的调用代码很好地工作,又可以使Armchair
能够看到Chair
课。
作为说明-我从没想过实例化中级类,在此示例中仅实例化Table
和Armchair
,但从不实例化Chair
或Furniture
。
$ tree -I __pycache__ furniture/
furniture/
├── chair.py
└── __init__.py
__init__.py
class Furniture:
pass
class Table(Furniture):
pass
chair.py
from . import Furniture
class Chair(Furniture):
pass
class Armchair(Chair):
pass
和您的代码:
import furniture
import furniture.chair
my_chair = furniture.chair.Armchair()
my_table = furniture.Table()
注意:那么您可能想在Furniture和Chair类前面加上下划线,因为这将其标记为受保护。