class Category: def init(self, name, parent=None): self.name = name self.parent = parent self.children = []

    if parent:
        parent.children.append(self)

def __repr__(self):
    return f'Category({self.name})'

def __str__(self):
    return self.name

def get_path(self):
    if self.parent:
        return self.parent.get_path() + [self.name]
    return [self.name]

class CategoryManager: def init(self): self.root_categories = []

def add_category(self, category_name, parent_category_name=None):
    if parent_category_name:
        parent_category = self.find_category(parent_category_name)
        category = Category(category_name, parent_category)
    else:
        category = Category(category_name)
        self.root_categories.append(category)
    return category

def find_category(self, category_name):
    for category in self.root_categories:
        result = self._find_category(category, category_name)
        if result:
            return result

def _find_category(self, category, category_name):
    if category.name == category_name:
        return category
    for child in category.children:
        result = self._find_category(child, category_name)
        if result:
            return result

def get_categories(self):
    categories = []
    for category in self.root_categories:
        categories += self._get_categories(category)
    return categories

def _get_categories(self, category):
    categories = [category]
    for child in category.children:
        categories += self._get_categories(child)
    return categories

def get_category_path(self, category_name):
    category = self.find_category(category_name)
    return category.get_path()

Example usage

cm = CategoryManager()

Add root categories

root1 = cm.add_category('Root Category 1') root2 = cm.add_category('Root Category 2')

Add sub-categories

sub1 = cm.add_category('Sub-Category 1', 'Root Category 1') sub2 = cm.add_category('Sub-Category 2', 'Root Category 1') sub3 = cm.add_category('Sub-Category 3', 'Sub-Category 1')

Get all categories

categories = cm.get_categories() print(categories)

Get category path

path = cm.get_category_path('Sub-Category 3') print(path) # ['Root Category 1', 'Sub-Category 1', 'Sub-Category 3']

Python 商品类目管理代码示例:构建树形结构

原文地址: https://www.cveoy.top/t/topic/lplP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录