2014-12-07 28 views
2

使用isinstance我们可以检查某些东西是否属于某种类型,但我们如何测试某个对象是否属于某个模块的类?测试对象来自哪个模块而不是哪种类型

实施例:

>>> type(root) 
<class 'bs4.BeautifulSoup'> 

>>> isinstance(root, BeautifulSoup) 
True 

如何测试此对象是否 “属于” 的BS4包?

注意:当我递归地浏览汤中的对象时,它将以bs4.BeautifulSoup对象开始,但在另一个层次上它们是bs4.element.Tag节点。这就是为什么我要检查源自该模块而不是特定类型的原因。

回答

2

如果我理解正确,你想知道模块的一个对象。那是对的吗?如果是这样,你将要检查的对象的__module__属性:

>>> from bs4 import BeautifulSoup 
>>> BeautifulSoup.__module__  # module of BeautifulSoup 
'bs4' 

>>> import requests 
>>> r = requests.get('http://www.google.com') 
>>> soup = BeautifulSoup(r.content) 
>>> soup.__module__    # module of a BeautifulSoup object 
'bs4' 

在您的评论来看,你可能是这样的后:

>>> soup = BeautifulSoup('<b class="boldest">A bold statement.</b>') 
>>> tag = soup.b 
>>> tag.__module__    # module of a Tag object 
'bs4.element' 
+0

不错,但我要检查它的实例(所以在这种情况下,'root .__ module__')。谢谢,这就是它! – PascalVKooten 2014-12-07 15:52:16

+0

@PascalvKooten所以'root .__ module__'是你在找什么?还是我仍然误解你? – 2014-12-07 15:59:41

+0

的确,'__module__'就是答案。我现在可以使用'root .__ module__'来测试'root'是否是来自'bs4'模块的对象。 – PascalVKooten 2014-12-07 16:01:24

相关问题