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/

10-12 22:57