如何获取dataclass属性数量 及统计类中动态添加的属性总数
解决方案
你可以通过统计Recipes类下类型为Recipe的自定义属性数量得到食谱总数,无需修改现有存储结构,符合你不能用列表/字典存储食谱的要求。
替换占位符的代码
你只需要把print语句的占位符替换为以下内容即可:
sum(1 for attr in dir(Recipes) if isinstance(getattr(Recipes, attr), Recipe))
实现逻辑
dir(Recipes)会返回Recipes类所有属性的名称字符串- 遍历所有属性名称,用
getattr(Recipes, attr)取出对应的属性值 - 用
isinstance()判断属性值是否为Recipe类的实例,过滤掉类内置的魔法属性和其他非食谱属性,统计符合要求的属性数量即可
完整可运行代码
from dataclasses import dataclass @dataclass class Recipe: ing1: str ing2: str ing3: str class Recipes(): pass # 注意:你原有代码的setattr行末尾缺少右括号,这里已经补充 setattr(Recipes, 'Salad', Recipe('cabbage', 'lettuce', 'potato')) setattr(Recipes, 'Salad2', Recipe('tomato', 'lettuce', 'ranch')) print("There are %s number of recipes!" % sum(1 for attr in dir(Recipes) if isinstance(getattr(Recipes, attr), Recipe))) # 输出:There are 2 number of recipes!
内容的提问来源于stack exchange,提问作者user16610513
相关产品推荐
相关产品推荐

