例如,在c#中,我可以使用反射做以下操作:
public class A
{
object obj1;
[MyCustumAttribute(data)]
public object Obj1Property
{ get; set; }
public A() {}
}
public static void Main(string[] args)
{
Type t = typeof(a);
PropertyInfo[] props = t.GetProperties();
attrs = props[0].GetCustomAttributes();
//Do something with the properties based on their custom attributes
}
请注意,我可以对A的方法、数据成员等做同样的事情,而不仅仅是对属性。
是否有办法在Python 2.7中做同样类型的事情?
EDIT:重读你的问题后,我意识到反射方面没有得到解决。从我所能找到的答案来看,答案仍然是否定的。net反射似乎没有解决DLR类型(例如IronPython, IronRuby)。python中有一个反射机制,你可以利用它,详见https://stackoverflow.com/a/1447529/635634。
不完全是这样,但是你可以使用DevHawk的解决方案达到同样的效果。
可以帮助完成你想要实现的是python装饰器(在这个SO答案中有关于装饰器的广泛信息)
简单地说,它们从2.4版开始就可用了,允许你包装或修饰一个函数——为了确定一个给定的函数是否有修饰符,你可以尝试使用functools库来求值。
另一种方法可以帮助你完成这一点,因为你想装饰一个类是Python的metaclass