编程语言的自省

什么是自省?

自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。简单一句就是,运行时能够获知对象的类型。

 

如python, buby, object-C, c++都有自省的能力,这里面的c++的自省的能力最弱,只能够知道是什么类型,而像python可以知道是什么类型,还有什么属性。

 

C++中通过typeid来确定某个对象是不是属于某个类,如:

class ClassA
{
    ... 
    ...
}

ClassA *pA = new ClassA;
if ( typeid( *pA ) == typeid( ClassA ))
{
    cout<<"match"<<endl;
}

 

python中通过dir()来确定,如:

class foo(object):
  def __init__(self, val):
    self.x = val
  def bar(self):
    return self.x
 
...
 
>>> dir(foo(5))
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'bar', 'x']

当然在代码中也可以判断某个对象是否属于某个类或者有什么属性方法:

obj = foo(1)
if ( isinstance( obj, foo )):
    print( "yes it is" )

if ( hasattr( obj, "bar" )):
    print( "yes it has" )

 

待续…

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示