首页 > 解决方案 > Python 推理

问题描述

我是 python 新手,但不是编程新手。有没有办法知道两个对象是否具有相同的功能和字段?

我有这种情况

var1 = func1()
var2 = func2()
func3(var1)
func3(var2)

两者func1func2都是我使用的库中的函数,几乎没有文档。

很有可能是同一类型的物体var1var2但我怎么能确定呢?

说我知道这func3(var1)行得通,有没有办法我可以知道它是否可以使用var2

标签: pythonvisual-studio-code

解决方案


首先,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则此代码将起作用。defaultdictdict

结论:没有单一的验证参数收据。您始终需要在防止无效属性值和代码可读性之间保持平衡。假设您是调用您的函数的用户:参数应该具有什么类型会很明显吗?如果您传递了错误的值,该错误是否可以理解?


推荐阅读