作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我有这样的类(class):
class Alphabet(object):
__init__(self):
self.__dict = {'a': 1, 'b': 2, ... 'z': 26}
@property
def a(self):
return self.__dict['a']
@property
def b(self):
return self.__dict['b']
...
@property
def z(self)
return self.__dict['z']
定义这将是一项漫长而繁琐的任务,而且似乎非常多余。有没有办法动态创建这些属性?我知道您可以使用内置的 setattr 动态创建属性,但我想控制读/写/删除访问(因此我想使用属性)。谢谢!
最佳答案
不要使用属性,而是实现以下方法:
__getattr__(self, name)
__setattr__(self, name, value)
__delattr__(self, name)
见 http://docs.python.org/reference/datamodel.html#customizing-attribute-access
您的 __getattr__
方法可能如下所示:
def __getattr__(self, name):
try:
return self.__dict[name]
except KeyError:
msg = "'{0}' object has no attribute '{1}'"
raise AttributeError(msg.format(type(self).__name__, name))
关于python - 如何在 Python 中动态创建属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967551/
我是一名优秀的程序员,十分优秀!