Python 商品类目管理代码示例:构建树形结构
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']
原文地址: https://www.cveoy.top/t/topic/lplP 著作权归作者所有。请勿转载和采集!