假设我有一个这样的类:
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']
Run Code Online (Sandbox Code Playgroud)
这将是一项漫长而繁琐的任务,并且看起来非常多余.有没有办法动态创建这些属性?我知道您可以使用内置的setattr动态创建属性,但我想控制读/写/删除访问(因此我想使用属性).谢谢!
Thi*_*ter 33
不要使用属性,而是实现以下方法:
__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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10001 次 |
| 最近记录: |