gpt4 book ai didi

python - 内置非数据版本属性?

转载 作者:太空狗 更新时间:2023-10-29 20:24:33 25 4
gpt4 key购买 nike

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'] 覆盖:

The property() function is implemented as a data descriptor. Accordingly, instances cannot override the behavior of a property.

为了隐藏它,我必须使用自己的描述符而不是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com