[英]Python creating a readonly wrapper class without modifying wrapped class
我有一個基本 class ,如下所示:
class Base:
def __init__(self, prop):
self.prop = prop
我想創建一個只讀的包裝器 class ReadonlyWrapper
,具有以下功能:
# Create instance using __init__ of base class.
readonly_instance = ReadonlyWrapper()
# I can access properties
prop = readonly_instance.prop
# This should raise a PermissionError
readonly_instance.prop = 23
更准確地說,我希望 class 的所有字段都是只讀的,但只有在調用__init__
之后,否則 class 不能在構造函數本身中構造。 我知道可以使用屬性裝飾器來完成,但我不想將所有屬性都變成屬性。
這可以通過以下方式覆蓋__setattr__
來實現:
class ReadonlyWrapper(Base):
_initialized = False
def __init__(self, *args, **kwargs):
super(ReadonlyWrapper, self).__init__(*args, **kwargs)
self._initialized = True
def __setattr__(self, key, value) -> None:
if self._initialized:
raise PermissionError()
else:
super().__setattr__(key, value)
一旦_initialized
設置為True
,任何設置屬性的嘗試都會引發PermissionError
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.