抱歉,如果标题是混淆或误导。我想要的是一种每次使用setter更新变量时更新日志的方法,特别是在不允许更改建议的变量时。一个简单的代码示例最好地解释了我想要什么。这是python3的代码。你知道吗
假设我的程序有一部分输入变量runvars,其中包含变量var1
和var2
。现在从程序上下文来看,var1
必须是布尔值。我当前处理这些变量的方法是一个类,它用属性装饰器(在文件中)处理这些变量运行变量.py)地址:
class runvars:
def __init__(self,var1=1,var2="obsolete"):
self.__var1 = var1
self.__var2 = var2
@property
def var1(self):
return self.__var1
@property
def var2(self):
return self.__var2
@var1.setter
def var1(self,val):
if isinstance(val,bool):
self.__var1 = val
else:
message = "Type: Setter\nVar.:runvars/var1\nErr.: runvars/var1 must be a boolean."
“runvars”只是许多输入部分中的一个。我想把它合并为一个模拟对象的一部分,这个对象在输入参数如runvars和许多其他输入部分的基础上,包含模拟元数据。这些数据之一是错误日志。例如:
import runvars
class simulation:
def __init__(self,var3=True):
self.__var3 = var3
self.__errorLog = []
self.__runvars = runvars.runvars()
@property
def errorLog(self):
return self.__errorLog
@property
def var3(self):
return self.__var3
@property
def runvars(self):
return self.__runvars
@var3.setter
def var3(self,val):
if isinstance(val,bool):
self.__var3 = val
else:
self.__errorLog.append("Type: Setter\nVar.: simulation/var3\nErr.: simulation/var3 must be a boolean.")
现在如果我跑
mySim = simulation()
print(mySim.var3)
print(mySim.errorLog)
mySim.var3 = "three"
print(mySim.var3)
print(mySim.errorLog)
我可以看出,我在尝试为var3分配一个字符串时搞砸了,更改被拒绝了。我希望能为var1做同样的事情。你知道吗
我很抱歉,如果出现了实质上类似的东西,我只是有一个困难的时间来制定搜索这个确切的问题。任何建议,包括如何组织这样一个项目的根本性改变,都是受欢迎的。我真的很想通过mySim.runvars.subsec1.var1 = value
这样的操作来改变变量,因为输入变量有很多逻辑分组。此外,我希望将runvars
之类的类保留在单独的文件中,而不是嵌套,因为否则文件将非常大。也许某种形式的继承在这里会有所帮助,但我只是不明白这样做有什么意义,比如让runvars
成为模拟的子类,因为我永远不会单独实例化runvars
类。你知道吗
您可以将对错误日志列表的引用传递给
runvars
的实例。你知道吗在
simulation
中:由于列表是作为引用传递的,如果将非布尔值传递给var1,
self.__errorLog
将相应地更新。你知道吗相关问题 更多 >
编程相关推荐