我有一個基本插件定義,從中創建子插件類。附加到應用程式的插件使用從子插件繼承的類,如Writer。我想防止類改變插件的型別。
from abc import ABCMeta, abstractclassmethod
class BasePlugin(metaclass=ABCMeta):
@property
@abstractclassmethod
def ID(cls):
pass
@property
@abstractclassmethod
def TYPE(cls):
pass
def __setattr__(self, name, value):
if name in ['ID','TYPE']:
raise Exception("Denied")
else:
object.__setattr__(self, name, value)
class Writer(BasePlugin):
TYPE = "WRITER"
class Plugin1(Writer):
ID = "plugin1"
TYPE = "dummy type" ## I WANT TO RESTRICT THIS
我可以限制它在實體上設定型別但不在類中
s1 = Plugin1()
print(s1.ID)
print(s1.TYPE)
s1.ID = "n"
s1.TYPE = "newType"
uj5u.com熱心網友回復:
很難讓它防水,但一個簡單的機制是:
class Writer(BasePlugin):
TYPE = "WRITER"
def __init__(self):
if self.TYPE != "WRITER":
raise Exception("Denied")
class Plugin1(Writer):
TYPE = "dummy type"
p = Plugin1()
已經在實體化時Plugin1引發了例外。Writer但是,當您覆寫基類的建構式而不呼叫它時,可以避免這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459976.html
上一篇:這些是繼承的屬性嗎?
下一篇:訪問作為模板的基類時的不同行為
