python - Python 推理
问题描述
我是 python 新手,但不是编程新手。有没有办法知道两个对象是否具有相同的功能和字段?
我有这种情况
var1 = func1()
var2 = func2()
func3(var1)
func3(var2)
两者func1
和func2
都是我使用的库中的函数,几乎没有文档。
很有可能是同一类型的物体var1
,var2
但我怎么能确定呢?
说我知道这func3(var1)
行得通,有没有办法我可以知道它是否可以使用var2
?
解决方案
首先,Python 经常使用鸭子类型:如果对象具有所需的属性和方法,则可以使用它。你可以这样检查:
if hasattr(var2, 'method_name'):
... your code ...
管道类型实现的另一种方式是隐式的。例如,如果你的函数增加了它的参数,你可能不会检查参数,而只是写:
result = int(var1) + 1
如果var1
不能转换为 int,用户会得到一个可读性很强的错误:
TypeError: int() argument must be a string or a number, not 'MyCustomClass'
其次,您可以显式检查var 是否是某个类(或其后代)的实例。如果你知道这var1
是一个实例dict
:
if isinstance(var2, dict):
... your code ...
如果var2
是 的实例或 的其他子类,dict
则此代码将起作用。defaultdict
dict
结论:没有单一的验证参数收据。您始终需要在防止无效属性值和代码可读性之间保持平衡。假设您是调用您的函数的用户:参数应该具有什么类型会很明显吗?如果您传递了错误的值,该错误是否可以理解?
推荐阅读
- json - 比较 Firebase 实时数据库规则的子值 (.val) 时,比较的范围有多大?
- python - PyQt5 insertPlainText 来自另一个类 Python 3.8
- sql - 当一个值出现多次时选择行
- php - Composer 安装 Yii2 PHP
- python - 非常基本的 pyqt5 对话框应用程序退出并退出代码 -1073740791
- java - Java iText 没有关联的 PdfWriter 用于制作间接
- azure - Azure 网站:C 或 D 驱动器上的“主页”?
- wordpress - 流 URL 未在 WordPress 上播放
- mongodb - 在分片 mongodb 集合中加载文档后,我可以创建索引吗?
- javascript - 如何更新材料设计精简版徽章计数