demo2_pydantic.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from pydantic import BaseModel
  2. # class Bidder(BaseModel):
  3. # name: str # 字符串
  4. # age: int # 整数
  5. #
  6. # # 用关键字参数创建实例
  7. # s = Bidder(name="小明", age=18)
  8. # # s = Bidder(name="小明", age="十八")
  9. # print(s.name) # 小明
  10. # print(s.age) # 18
  11. # print(type(s.age)) # 18
  12. # print(s) # name='小明' age=18
  13. # from pydantic import BaseModel, Field
  14. #
  15. # class UserProfile(BaseModel):
  16. # name: str = Field(description="用户姓名") # 必填:没有默认值
  17. # phone: str = Field(default="", description="手机号") # 可选:有默认值 ""
  18. # age: int = Field(default=18, description="年龄") # 可选:默认 18
  19. # # tags: list[str] = Field(default_factory=list, description="标签列表") # 正确写法:只能列表中存字符串
  20. # tags: list[str | int] = Field(default_factory=list, description="标签列表") # 正确写法:列表中既可以是字符串也可以是整数
  21. # title: str = "这是一个投标人的介绍" # 简化默认值的写法
  22. #
  23. #
  24. # up = UserProfile(name="张三", phone="123456", tags=["a", 2, "c"])
  25. # print(up)
  26. # print(up.name)
  27. # print(up.age)
  28. # print(up.phone)
  29. # print(up.tags)
  30. # print(up.title)
  31. # print(up.g1)
  32. #
  33. # from pydantic import BaseModel, Field
  34. # from typing import Optional
  35. # class EducationItem(BaseModel):
  36. # school: str = Field(description="供应商名称")
  37. # major: str = Field(description="专业名称")
  38. #
  39. # class Qualification(BaseModel):
  40. # name: str = Field(description="姓名")
  41. # education: list[EducationItem] = Field(default_factory=list) # 资质信息列表
  42. # nickname: Optional[str] = None # 可以是字符串,也可以是 None
  43. #
  44. # # 创建时,嵌套部分可以直接用字典,Pydantic 会自动转成对应的子模型
  45. # # qualification = Qualification(
  46. # # name="小明",
  47. # # education=[
  48. # # {"school": "清华大学", "major": "计算机"},
  49. # # {"school": "北京大学", "major": "软件工程"},
  50. # # ],
  51. # # )
  52. #
  53. # qualification = Qualification(
  54. # name="小明",
  55. # education=[EducationItem(school="清华大学", major="计算机"),
  56. # EducationItem(school="清华大学", major="计算机")],
  57. # )
  58. #
  59. #
  60. # print(f'qualification: {qualification}')
  61. # print("*"*80)
  62. # print(qualification.name) # 小明
  63. # print(qualification.education[0].school) # 清华大学 ← 注意:已经是 EducationItem 对象了
  64. # print(type(qualification.education[0])) # <class '__main__.EducationItem'>
  65. # print(qualification.nickname) # <class '__main__.EducationItem'>
  66. from pydantic import BaseModel, Field
  67. # class Bidder(BaseModel):
  68. # name: str = Field(description="姓名")
  69. # age: int = Field(default=18, description="年龄")
  70. #
  71. # s = Bidder(name="小明", age=20)
  72. #
  73. # d = s.model_dump() # 模型 → 字典
  74. # # d = s.dict()
  75. # print(d) # {'name': '小明', 'age': 20}
  76. # print(type(d)) # <class 'dict'>
  77. #
  78. # data = {"name": "小红", "age": 22}
  79. # s2 = Bidder(**data) # 字典 → 模型
  80. # print(s2.name) # 小红
  81. from enum import Enum
  82. class DefenseStage(str, Enum): # 继承 str,取值就是字符串
  83. WARMUP = "warmup"
  84. TECH_BASE = "tech_base"
  85. PROJECT = "project"
  86. CLOSING = "closing"
  87. FINISHED = "finished"
  88. print(DefenseStage.WARMUP) # DefenseStage.WARMUP
  89. print(DefenseStage.WARMUP.value) # warmup
  90. if DefenseStage.WARMUP == "warmup":
  91. print("这是预热阶段")
  92. if DefenseStage.PROJECT == "project":
  93. print("项目阶段")