python - 在模块加载时设置类的属性

标签 python properties

我正在编写处理 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/

相关文章:

ios - 从 CGFloat 数组创建属性 - iOS

spring - 从另一个模块上下文访问属性文件

c# - 从基类更改属性 setter 行为

javascript - 如何使用 Python 搜索文件中的 JavaScript 变量?

python - Pandas:使用 pd.Series 对带有索引的 pd.DataFrame 进行排序

python - 全局名称 'rank' 未定义

python - 使用 pandas 在 matplotlib 中绘图

c# - 创建用于缓存属性访问器的委托(delegate)

python - 如何使用 Python 访问 Windows Vista 上的文件属性?

python - 总结 Pandas 表中的循环结果