抱歉,标题令人困惑或误导。我想要的是一种在每次使用setter更新变量时都更新日志的方法,尤其是在不允许提议的变量更改时。一个简单的代码示例可以最好地解释我想要什么。这是针对python 3代码的。
比方说,我的程序有一部分输入变量'runvars',其中包含变量var1
和var2
。现在从程序上下文来看,var1
必须是布尔值。我当前用于处理这些变量的方法是使用属性装饰器(在runvars.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
类。
答案 0 :(得分:0)
您可以将对错误日志列表的引用传递给"@babel/plugin-transform-runtime": "^7.3.4",
"@babel/runtime-corejs2": "^7.3.4",
的实例。
runvars
在class runvars:
def __init__(self,var1=1,var2="obsolete", errors=[]):
self.__var1 = var1
self.__var2 = var2
self.__errors = errors
#...
@var1.setter
def var1(self,val):
if isinstance(val,bool):
self.__var1 = val
else:
message = "Type: Setter\nVar.:runvars/var1..."
self.__errors.append(message)
中:
simulation
由于列表是作为引用传递的,因此,如果将非布尔值传递给var1, class simulation:
def __init__(self,var3=True):
self.__var3 = var3
self.__errorLog = []
self.__runvars = runvars.runvars(errors=self.__errorLog)
将相应地更新。