在包中进行类层次结构的正确方法

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

我想知道在包中定义多层类层次结构的正确方法。

例如,说我有这些课程:

class Furniture:
class Table(Furniture):
class Chair(Furniture):
class Armchair(Chair):

等。

在我的调用代码中,我希望能够执行以下操作:

import furniture
my_chair = furniture.chair.Armchair()
my_table = furniture.Table()

我似乎无法理解应该在何处定义什么类定义和导入-既可以使我的调用代码很好地工作,又可以使Armchair能够看到Chair课。

作为说明-我从没想过实例化中级类,在此示例中仅实例化TableArmchair,但从不实例化ChairFurniture

python
1个回答
0
投票
$ 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()

注意:那么您可能想在FurnitureChair类前面加上下划线,因为这将其标记为受保护。

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