提问人:amit 提问时间:11/15/2022 更新时间:11/16/2022 访问量:170
枚举成员作为签名的默认值
Enum member as a default value on signature
问:
我知道将可变对象指定为函数的默认值是不好的。
像这样:
def foo(a = []):
pass
我的问题是分配枚举成员也是一种不好的做法?
像这样:
Class SomeEnum(Enum)
ENUM_KEY = SomeClass()
def foo(a = SomeEnum.ENUM_KEY)
pass
答:
0赞
Ethan Furman
11/16/2022
#1
使用枚举成员作为默认参数(通常)是可以的。
枚举成员通常是常量的(例如 、 或 ),但也可以使用可变值,例如空列表。如果要在函数中更改枚举的值,则具有与直接使用可变默认值相同的风险。value
1
debug
Monday
评论
0赞
chepner
11/16/2022
你的第二段(是正确的)与你的第一句话相矛盾。使用成员作为默认参数可能是可以的,但出于同样的原因,任何类型的任意值都可以。enum
0赞
Ethan Furman
11/16/2022
@chepner:说得好,第一句话更正了。
评论
SomeEnum.ENUM_KEY
是 的实例,它是可变的。 () (一般来说)也是可变的。通过可变性,您究竟指的是哪个对象?更具体地说,例如,如果?顺便说一句,第二个代码片段不是有效的 python 代码。请检查语法。SomeEnum
SomeEnum.ENUM_KEY.value
SomeClass()
SomeClass = int
foo
a
[]
a