class Books():
def __init__(self):
self.__dict__['referTable'] = 1
@property
def referTable(self):
return 2
book = Books()
print(book.referTable)
print(book.__dict__['referTable'])
运行:
vic@ubuntu:~/Desktop$ python3 test.py
2
1
Books.referTable
being a data descriptor没有被book.__dict__['referTable']
遮盖:要隐藏它,我必须使用自己的描述符而不是
property
内置描述符。是否有像property
这样的内置描述符,但其中哪一个是非数据的? 最佳答案
为了扩展我的评论,为什么不简单这样:
>>> class Books():
... def __init__(self):
... self.__dict__['referTable'] = 1
... @property
... def referTable(self):
... try:
... return self.__dict__['referTable']
... except KeyError:
... return 2
...
>>> a = Books()
>>> a.referTable
1
>>> del a.__dict__['referTable']
>>> a.referTable
2
现在,我想指出的是,我认为这不是一个好的设计,与使用私有(private)变量而不是直接访问
__dict__
相比,您会更好。例如:class Books():
def __init__(self):
self._referTable = 1
@property
def referTable(self):
return self._referTable if self._referTable else 2
简而言之,答案是否定的,没有
property()
可以按照您在Python标准库中想要的方式工作。关于python - 内置非数据版本的属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10374379/