簡體   English   中英

Python 創建只讀包裝器 class 而不修改包裝的 class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM