动态地将方法添加到Python类[重复]

pw9qyyiw  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(85)

此问题在此处已有答案

How to access (get or set) object attribute given string corresponding to name of that attribute(3个答案)
昨天就关门了。
我必须创建大量的类,它们的属性都遵循相同的模式。我想创建一种简洁的方法来完成这一任务,目标是使用脚本来布局所有的类,这样我就可以避免重复的工作。

add_get_for(class_type, property):
  class_type[property] = lambda self: self._attributes[property]

class A:
  def __init__(self, input_object):
     self._attributes = process(input_object)
  
add_get_for(A, 'attrib1')
add_get_for(A, 'attrib2')

字符串
add_get_for方法失败,因为类上的项赋值。如果事先不知道方法的名称,我就想不出赋值lambda函数的方法,这对我的目标毫无意义。

z2acfund

z2acfund1#

你可以将setattr()与lambda和f-string一起使用:

class A:
  def __init__(self, input_object):
     self._attributes = process(input_object)

def process(input_object):
  return input_object

def add_get_for(class_type, property):
  setattr(class_type, f'get_{property}', lambda self: self._attributes[property])

add_get_for(A, 'attrib1')
add_get_for(A, 'attrib2')
obj = A({'attrib1': 'value1', 'attrib2': 'value2'})
print(obj.get_attrib1())  # type: ignore so static type checkers don't complain
print(obj.get_attrib2())  # type: ignore so static type checkers don't complain

字符串

输出:

value1
value2

相关问题