是否有一种方法可以在Python 2.7中像c#中那样为成员提供自定义属性?

本文关键字:中像 成员 自定义属性 一种 方法 Python 是否 | 更新日期: 2023-09-27 18:17:43

例如,在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中做同样类型的事情?

是否有一种方法可以在Python 2.7中像c#中那样为成员提供自定义属性?

EDIT:重读你的问题后,我意识到反射方面没有得到解决。从我所能找到的答案来看,答案仍然是否定的。net反射似乎没有解决DLR类型(例如IronPython, IronRuby)。python中有一个反射机制,你可以利用它,详见https://stackoverflow.com/a/1447529/635634。

不完全是这样,但是你可以使用DevHawk的解决方案达到同样的效果。

可以帮助完成你想要实现的是python装饰器(在这个SO答案中有关于装饰器的广泛信息)

简单地说,它们从2.4版开始就可用了,允许你包装或修饰一个函数——为了确定一个给定的函数是否有修饰符,你可以尝试使用functools库来求值。

另一种方法可以帮助你完成这一点,因为你想装饰一个类是Python的metaclass