0
A
回答
4
如果您想要一個不可變的對象,請使用collections.namedtuple()
factory爲您創建一個班級:
from collections import namedtuple
foo = namedtuple('foo', ('bar', 'baz'))
演示:
>>> from collections import namedtuple
>>> foo = namedtuple('foo', ('bar', 'baz'))
>>> f = foo(42, 38)
>>> f.someattribute = 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'foo' object has no attribute 'someattribute'
>>> f.bar
42
注意,整個對象是不可變的;在以下事實之後您不能更改f.bar
:
>>> f.bar = 43
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
3
覆蓋的__setattr__
方法:
>>> class Foo(object):
def __setattr__(self, var, val):
raise TypeError("You're not allowed to do this")
...
>>> Foo().x = 1
Traceback (most recent call last):
File "<ipython-input-31-be77d2b3299a>", line 1, in <module>
Foo().x = 1
File "<ipython-input-30-cb58a6713335>", line 3, in __setattr__
raise TypeError("You're not allowed to do this")
TypeError: You're not allowed to do this
即使Foo
的子類會引發同樣的錯誤:
>>> class Bar(Foo):
pass
...
>>> Bar().x = 1
Traceback (most recent call last):
File "<ipython-input-35-35cd058c173b>", line 1, in <module>
Bar().x = 1
File "<ipython-input-30-cb58a6713335>", line 3, in __setattr__
raise TypeError("You're not allowed to do this")
TypeError: You're not allowed to do this
相關問題
- 1. Python「受保護」屬性
- 2. 保護python屬性文件中的值
- 3. 如何保護類屬性免於在PHP中擴展類?
- 4. 如何查找C#類的內部屬性?保護?保護內部?
- 5. 保護div屬性
- 6. 聚合物2.0類heredy保護屬性
- 7. 如何保護Rails模型屬性?
- 8. 如何保護Laravel模型屬性
- 9. 與保護的屬性setter
- 10. Cython,受保護的屬性
- 11. 如何爲抽象類設置mock的受保護屬性?
- 12. OOP:依賴於類 - 子類合同中的受保護屬性
- 13. 保護屬性文件中的密碼
- 14. 保護Rebol中的對象屬性
- 15. classmethod中的受保護屬性
- 16. python中的類,如何設置屬性
- 17. 受保護的內部屬性vs受保護的屬性和Resharper
- 18. 內存保護屬性
- 19. mongodb/mongoose保護屬性
- 20. 如何在表單中更改rails中的受保護屬性
- 21. 在派生類中分配受保護的屬性
- 22. 使用Json.NET序列化泛型類中的受保護屬性
- 23. groovy受保護的屬性不能在子類中覆蓋
- 24. 如何將VB.net中的受保護屬性轉換爲C#
- 25. 如何在JavaScript中創建受保護的對象屬性
- 26. 如何獲得PHP中對象的受保護屬性值
- 27. 如何訪問gtmetrix中的受保護屬性API
- 28. Python中的「受保護」訪問 - 如何?
- 29. 如何在Python類中設置屬性
- 30. 如何保護Python Flask API
在類定義中使用'__slots__ =()'。參見['slots'](http://docs.python.org/2/reference/datamodel.html#slots)。 – falsetru
@falsetru:但是,這是一個副作用。 –
你想要一個沒有**任何**屬性的對象嗎?然後使用'x = object()'。 –