我想控制对 Itcl 公共变量的读取访问。我可以使用以下方法进行写访问:
package require Itcl
itcl::class base_model_lib {
public variable filename ""
}
itcl::configbody base_model_lib::filename {
puts "in filename write"
dict set d_model filename $filename
}
configbody 定义了调用 config 时会发生什么$obj configure -filename foo.txt
:但是我如何控制读取过程中发生的事情呢?想象一下,我想做的不仅仅是在读取过程中查找一个值。
我想继续使用标准的 Itcl 模式,即使用 cget/configure 向用户公开这些。
这就是我的问题。但是,让我描述一下我真正想做的事情,然后你告诉我是否应该做一些完全不同的事情:)
我喜欢python类。我喜欢我可以创建一个变量并从实例外部读取/写入它。稍后,当我想变得花哨时,我将创建方法(使用@property
和@property.setter
)来自定义读/写,而用户不会看到 API 更改。我正在尝试在这里做同样的事情。
我的示例代码还建议了我想做的其他事情。实际上,文件名内部存储在字典中。我不想将整个字典暴露给用户,但我确实希望他们能够更改该字典中的值。所以,真正的“文件名”只是一个存根。我不想要一个叫做那个的公共变量。相反,我想使用 cget 和 configure 来读取和写入“事物”,我可能会选择创建一个简单的公共变量,或者可能希望定义一个查找它的过程。
PS:我确信我可以创建一个采用一个或两个参数的方法。如果一个,它的读取和两个它的写入。我认为这不是要走的路,因为我认为您不能使用 cget/configure 方法。