在Python中,我如何看到对象的“类型”是什么?
我不知道是什么类型的。如何检查并将其打印到控制台在Python中,我如何看到对象的“类型”是什么?,python,Python,我不知道是什么类型的。如何检查并将其打印到控制台 print object.__class__.__name__ 应该这样做。类型变量将告诉您某物是什么类型。调用该函数。有关可用于类型的类型名称列表,请参见模块。类型基本上是一种值类型,以及对该值有效的操作 type(object) #gives you the type 如果要测试某个类型 import types class foo(object): pass >>> foo is types.ClassType # tes
print object.__class__.__name__
应该这样做。类型变量将告诉您某物是什么类型。调用该函数。有关可用于类型的类型名称列表,请参见模块。类型基本上是一种值类型,以及对该值有效的操作
type(object) #gives you the type
如果要测试某个类型
import types
class foo(object):
pass
>>> foo is types.ClassType # test if foo is a class
True
虽然你可以使用类型来进行内省,但我想知道你真正想要完成的是什么
在Python中,关注对象行为被认为是更好的实践。。。应用程序编程接口。。。而不是打字
你在乎手边的东西是不是食物吗。。。或者Foo的某个子类或Foo的某种代理会包含一个类似Foo的对象并将必要的功能委托给它吗
我看到的通常建议是使用Python的异常处理。。。尝试使用所需的接口,就好像对象的类型正确一样,并准备好处理在对象不支持该用法时可能引发的异常。当然,这通常是一个类型错误或属性错误
另一种选择是明智地使用hasattr,以查看对象是否具有必要的属性,通常使用与所需对象类似的方法。这里的主要警告是,在不相关的对象类中,可能存在方法名称冲突和完全不兼容的语义
Python的最新版本引入了对ABCs的支持。这基本上允许您使用isinstance和issubclass的方式是引用被测试对象的预期语义,而不是它们的文本实例化和类层次结构构件。当与ABC isinstance一起使用时,返回一个值,该值指示类是否支持被视为确定预期语义的签名方法
您可以阅读更多有关中最常用的ABC的信息
不幸的是,如果重复使用某些在现有Python核心库或标准库中具有传统意义的方法名,可能仍然会混淆ABC
例如,如果您创建了一些UI类并定义了.next的方法,那么可能需要使用一些假设的.previous。这样做,无需进一步努力,将意味着调用:isinstancefoo,collections.Iterable将返回True,即使您实现的语义(可能类似于进入UI中的下一页)与集合的预期语义完全正交。Iterable ABC
我认为可以通过创建一些其他抽象基类并将您的类注册为实现该抽象来消除歧义。但是,我不知道该如何工作。和dir将告诉您该对象可以做什么/具有哪些属性是的,dir是一个非常漂亮的函数docs.python.org网站关闭了吗?谷歌倒闭了吗?你有没有试着在这里搜索?出现了大约500个相关问题。为什么搜索不起作用?可能是重复的