gpt4 book ai didi

python - 在 Python 中测试类型值是常见的/好的做法吗?

转载 作者:太空狗 更新时间:2023-10-29 18:19:41 24 4
gpt4 key购买 nike

在 Python 中以 OOP 方式工作时是否经常测试类型值?

class Foo():
def __init__(self,barObject):
self.bar = setBarObject(barObject)

def setBarObject(barObject);
if (isInstance(barObject,Bar):
self.bar = barObject
else:
# throw exception, log, etc.

class Bar():
pass

或者我可以使用更宽松的方法,例如:

class Foo():
def __init__(self,barObject):
self.bar = barObject

class Bar():
pass

最佳答案

不,事实上,像第二种方法一样,测试类型值是非常常见的。这个想法是你的代码的客户(即使用你的类的一些其他程序员)应该能够传递具有所有适当方法或属性的任何类型的对象。如果它不是某个特定类的实例,那很好;您的代码永远不需要知道区别。这被称为鸭子打字,因为有句格言“如果它叫起来像鸭子,飞起来像鸭子,那它还不如是鸭子”(好吧,这不是真正的格言,但我明白了我认为它的要点)

您会在标准库中经常看到这种情况,其中包含处理文件输入或输出的所有函数。他们不需要实际的 file 对象,而是采用任何实现 read()readline() 方法的东西(取决于函数), 或 write() 用于写入。事实上,您经常会在文档中看到这一点,例如与 tokenize.generate_tokens ,我今天早些时候刚好在看:

The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects (see section File Objects). Each call to the function should return one line of input as a string.

这允许您使用 StringIO 对象(如内存中的文件)或更古怪的东西(如对话框)来代替真实文件。

在您自己的代码中,只需访问您需要的对象的任何属性,如果它是错误类型的对象,您需要的属性之一将不存在,它会抛出异常。

关于python - 在 Python 中测试类型值是常见的/好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3327454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com