作者KSJ (阿真)
看板Python
标题Re: [问题] 如何找到class的instance??
时间Fri Nov 27 01:45:22 2009
※ 引述《ya790206 (残云夺月)》之铭言:
: 标题: Re: [问题] 如何找到class的instance??
: 时间: Fri Nov 27 00:59:19 2009
:
: 最笨的方法
:
: class a:
: pass
:
: x=a()
: def findx(clsname):
: abc=globals()
: for i in abc:
: try:
: if abc[i].__class__ == clsname.__class__:
: print abc[i].s
: except AttributeError:
: pass
:
: x.s=5
: print type(x)
: y=a()
: y.s=66
: findx(a())
:
: 主要就是用globals找出所有变数
: 然後一个一个去比对资料型态
: 够笨吧...
: ~
: ~
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 114.38.9.125
: → AndCycle:可以直接传A而不用a()再做一个instance 11/27 01:36
: → AndCycle:inspect有getmembers跟isclass可以用 11/27 01:37
: → AndCycle:话说回来builtin就有isinstance可以用 ... 11/27 01:39
感谢大家回应 不过现在有个问题
用globals() 用肉眼 努力的看 真的有instance 假设叫 abc (class 是ABC)
可是 我打 abc
"这是一个import的module !?!?"
原来是 在globals() 里面
有同名的module…orz
这当然不是我乐见的事 不过取名字不是我能控制的
我要怎麽让程式知道我所用的abc 是module还是instance呢
事实上直接用的话 会是module
连用 isinstance(abc,ABC)也会出现
False
看起来像把abc当然module 而不是instance
这种问题有辨法解吗 拿到同名的instance 而不是module
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.63.180
※ 编辑: KSJ 来自: 140.112.63.180 (11/27 02:02)