2011-12-08 45 views
0

右检索Package.Module.Class名字,说我有这样的结构:(我正好居然有)从(Python)的类/类型

  • 接口(文件夹/包)
    • Test.py(模块)
      • 测试(类)

现在我想获得这个整体结构(Interface.Test.Test)作为一个字符串存储在某个地方。 我知道我可以使用type(myTestObjectInstance)或​​3210但检索我一个类型的对象,打印像<class 'Interface.Test.Test'>

但是,从那里,我不知道如何获得的实际结构部分。我当然可以解析这个字符串,但是我认为有一个更简单的方法可以做到这一点?

[编辑]
Larsmans提供了一个答案,但它不能完全回答我想怎样做:
他的回答是行不通的,如果我有提供的所有是该类型的对象本身(type(myTestObjectInstance)

回答

1

使用inspect.getmodule你可以(有时)在其中找到一个对象定义的模块,如

>>> from collections import defaultdict 
>>> import inspect 
>>> inspect.getmodule(defaultdict) 
<module 'collections' from '/usr/lib/python2.6/collections.pyc'> 

模块名称可以使用__name__找到。请注意,定义模块不必是一个你因转口进口:

>>> from scipy.sparse import csr_matrix 
>>> inspect.getmodule(csr_matrix).__name__ 
'scipy.sparse.csr' 
+0

那的确有效,这样做到了。 '名= “{0} {1}” 格式(inspect.getmodule(item.GetObj()) .__ name __,item.GetObj().__ class __.__ name __)' 这使我留下了“Interface.Test.Test” 我会将问题留给一小时或两小时,以查看是否有其他答案进入我接受你的。 –

+0

我刚发现这个实现还没有完全满足。如果我只有类Test的类型对象呢?那会如何解决? (将更新问题) –

+0

跳过,得到它的工作︰'def test(t): return“{0}。{1}”。format(inspect.getmodule(Test).__ name__,t .__ name __)' –