跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 类型注解, Enum 还是 str Literal?
未分類
6 2 月 2021

Python 类型注解, Enum 还是 str Literal?

Python 类型注解, Enum 还是 str Literal?

資深大佬 : Contextualist 0

目前在用 attrs 做 TOML 配置的结构定义。遇到有些条目是联合类型,可以指定关键字也可以给具体数值,比如以下 TOML:

attr0 = 0.98 # 或者 #attr0 = "magicx" 

那么这个条目的定义有两种写法,用 str Literal:

import attr from typing import Union, Literal  @attr.s(auto_attribs=True) class Config:     attr0: Union[float, Literal["magicx"]]  ... config = parse_config() if config.attr0 == "magicx":     ... 

或者用 Enum:

import attr from typing import Union from enum import Enum  class Attr0KW(Enum):     MAGICX = "magicx"  @attr.s(auto_attribs=True) class Config:     attr0: Union[float, Attr0KW]  ... config = parse_config() if config.attr0 is Attr0KW.MAGICX:     ... 

像这种只有一个关键字的,写个 Enum 又觉得过度封装了,但用 str Literal 又觉得不严谨。应该如何取舍?

大佬有話說 (2)

  • 資深大佬 : karatsuba

    不知道,不用 toml

  • 資深大佬 : crclz

    都可以。像 JAVA C#这种的,用 ENUM 是标准操作。所以 python 用 enum 算不上过度封装。

    如果使用你这个类的开发者很多,那么就尽量使用 Enum 。如果自己用,就使用字符串。

    我个人的建议是,其实 python 作为一门动态语言,也该有动态语言的样子,就直接使用字符串就行了,约束什么的也没有必要用类型注解来做,影响开发速度。

    当然,这是有依据的,例如 numpy 的 padding=’zero’之类的传参,大家都没怎么抱怨这种设计。如果参数不知道填什么,大家都知道去看函数注释。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具