Python - 如何以编程方式添加 属性 访问器

Python - how to add property accessors programmatically

class A:
   def __init__(self, *args, **kwargs):
      for item in ["itemA", "itemB"]:
          setattr(self, item, property(lambda : self.__get_method(item)))

   def __get_method(self, item):
       # do some stuff and return result
       # this is pretty complex method which requires db lookups etc. 
       return result

我试图想出上面的例子来在初始化期间创建 class 属性。项目列表将来会变大,不想每次添加新条目时都添加 @property

但是无法从 属性 获得结果,而是对象位置。

a = A()
a.itemA # returns <property at 0x113a41590>

最初是这样的,后来意识到这样可以更好。

class A:
    @property
    def itemA(self):
        return self.__get_method("itemA") 
    
    @property
    def itemX(self):
        ...
    # and so on

如何仅通过向 items 列表添加新条目来添加新属性,而 class 本身会为其创建访问器?

@juanpa.arrivillaga 评论的补充。 您还可以实现 __getattr__ 方法

例如:

class A:
    def __getattr__(self, name):
        #make everybody happy