汇报一下我的尝试结果:
尝试过使用魔法方法 __setattr__
尝试拦截,但这会导致所有存储区都变为只读——它们都基于 renpy.python.StoreModule
。所以更改一个存储区的 __setattr__
效果相当于更改所有存储区的 __setattr__
((
顺着上面的思路,我想创建一个基于 renpy.python.StoreModule
的子类以避免上面的问题,这里就命名为 MyStoreModule
。在 Ren'Py 中,创造存储区是通过 renpy.python.create_store
函数实现的。我尝试把这个函数复制下来修改其代码,使其使用 MyStoreModule
类创建命名空间而非 renpy.python.StoreModule
。但这样做会导致 python in ....
语句无法使用,翻了 ast.py
和 parser.py
文件也没看出什么来((((((((
后面我尝试重新绑定方法:
import types
from renpy.python import StoreModule
def newSetAttr(self, key, value):
if self.__dict__['__name__'] == "MyStoreName":
return
self.__dict__[key] = value
StoreModule.__setattr__ = types.MethodType(newSetAttr, StoreModule)
但这么做会有两种情况:
- 报 KeyError:
KeyError: '__name__'
- 报 TypeError:
TypeError: 'mappingproxy' object does not support item assignment