python - 我的小部件应该接受/返回什么数据类型?

标签 python design-patterns

我正在 python 中构建一个表单类,用于生成和验证 HTML 表单。每个字段都有一个关联的小部件,用于定义字段的呈现方式。

创建小部件时,会传入一个(默认)值,以便它知道第一次渲染时要显示的内容。提交表单后,会要求小部件提供一个值。我将其委托(delegate)给小部件,而不是仅仅从 POST 数据中获取它,因为小部件可能包含多个 HTML 输入(想想月/日/年选择器)。只有小部件知道如何将它们组合成一个值。

问题是,我不知道是否应该让小部件始终接受字符串,并始终返回字符串以保持一致性,或者接受并返回与其目的一致的数据类型(即,日期选择器可能应该返回 DateTime 对象)。

我的形式类(class)背后的理念是“混合搭配”。您可以选择想要的小部件,以及想要在其上运行的验证器/格式化器/转换器。我想这有助于“使用字符串”并让开发人员决定数据类型,但是......我想不出一个好的但是。您预计这种方法会出现任何问题吗?

最佳答案

虽然简单地传递字符串似乎是一个有用的想法,但我认为您会发现它并不像您希望的那样工作。

考虑一下日期示例 - 不要传递 date 对象,而是传递 "2010-01-01"格式的 str 。为了使用该数据,该类的每个用户不仅需要知道它是表示日期的 str,而且还需要知道该字符串的格式是什么。换句话说,你什么也没有得到。更糟糕的是,您无法将 datetime 对象传递到小部件中(除非您采取额外的步骤来处理这种情况)。

验证器或格式化程序问题并不像您想象的那么严重;您多久需要验证一个不代表日期的字符串,就好像它是一个日期一样?

关于python - 我的小部件应该接受/返回什么数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169096/

相关文章:

python - 人脸识别无法检测图像人脸是否不在人像上

java - ActionListener 是委托(delegate)模式的一个例子吗?

Python、Numpy、OpenCV——创建修改后的(同样快的) "addWeighted"函数

php - 在 Zend Framework 中采用数据映射器方法

Javascript DRY 设计模式 - 函数与对象

java - 适用的设计模式

c++ - UML 图和 C++ 设计模式

来自单独文件的Python变量值?

python - Pyautogui 查找多个屏幕截图匹配,无论颜色梯度如何

python - 修补 Python 中 CSV 文件中缺失的行