我正在编写处理 python 上的 dict 数据的代码。 在实现此类时,我必须定义很多属性。这并不难,但最近我想如果我能使用辅助函数之类的东西会好得多。
例如,假设我有一个如下所示的类。
class MyClass(object):
def __init__(self, data):
self.data = data
@property
def version(self):
return self.data["version"]
如果我可以用如下的方式编写这个类。
class MyClass(object):
def __init__(self, data):
self.data = data
define_own_property("data", "version")
它看起来微不足道,但如果我能做到这一点,我想我可以重用很多验证/异常处理案例。
有什么想法吗? :D
最佳答案
您只需编写一个函数来返回所需的访问器即可实现类似的目标:
def define_own_property(attr, key):
def prop(self):
return getattr(self, attr)[key]
return property(prop)
class MyClass(object):
def __init__(self, data):
self.data = data
version = define_own_property("data", "version")
请注意,您必须执行 version = ...
无法进行简单的函数调用 define_own_property
将属性添加到正在定义的类中,因为该类尚不存在,因此您无法引用它。
另一种可能性是为您的类提供一个属性,该属性是列表或字典或包含相关参数(“数据”、“版本”等)的内容,然后编写一个类装饰器来读取这些参数并自动创建该系列属性。这将根本不需要在类内部定义属性;您只需给出您希望属性访问的内容的列表,然后在类上使用一次装饰器。
关于python - 在模块加载时设置类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13619354/