【发布时间】:2016-10-13 18:35:46
【问题描述】:
pythonic 告诉函数调用者给定参数支持什么值的方法是什么?
他是 PyQt(用于 GUI)的一个例子。假设我有一个复选框,
class checkbox(object):
....
def setCheckState(self, value):
....
这里,setCheckState() 应该只期望选中或未选中。
PyQt 使用内置枚举(即Qt.Checked 或Qt.Unchecked),但这很糟糕。我一直在文档中寻找我正在使用的对象的枚举。
显然 PyQt 是用 unpythonic C++ 风格编写的。 应该在 Python 中如何处理这个或类似的问题?根据PEP 435 的说法,枚举似乎是该语言和非常具体的应用程序的最新添加,所以我认为有/有更好的方法来处理这个?
我想让我编写的代码在我的函数需要特定参数值时易于使用——几乎就像函数的组合框。
【问题讨论】:
-
枚举的引入正是因为每个人都在使用自己的 hacky 替代品。如果您想要的是枚举,请使用枚举。如果您只有两种状态,请考虑使用布尔值:
def setCheckState(self, checked=True):。 -
控制反转的支持者会争辩说,应该有三个不采用 any 参数的独立函数:
checkbox.set_checked()、checkbox.set_unchecked()和 @987654329 @. -
我想这比我想象的更基于意见,我希望像 Python 中的大多数东西一样,有一个正确的方法来做。
-
@chepner 你能解释一下
set_checked和set_unchecked与set_checked_state(bool)之间的区别吗?或者例如is_checked财产... -
@zvone 至少,它完全回避了应该使用什么值来指示哪个状态的问题。如果要选中该框,则不必担心是否应该将
1、True、"on"、"checked"或SOME_CONSTANT作为参数传递;您只需调用非常明显的set_checked()函数。
标签: python python-2.7 function parameters enums