Глядя на код класса Fuse (который представляет собой лабиринт извилистых маленьких отрывков, создающих прокси метода), я вижу этот бит (который является замыканием, используемым для создания сеттера внутри Fuse.MethodProxy._add_class_type
, строка 865):
def setter(self, xcls):
setattr(self, type + '_class', xcls)
for m in inits:
self.mdic[m] = xcls
for m in proxied:
if hasattr(xcls, m):
self.mdic[m] = self.proxyclass(m)
Когда вы делаете self.file_class = self.get_file
, это вызывается с self.get_file
, который является связанным методом. Ожидается, что зацикленные прокси-атрибуты смогут получить атрибуты из заданного вами класса, поместить их в свой прокси-словарь mdic
после переноса, но их там нет, потому что это скорее связанный метод, чем учебный класс. Поскольку он не может их найти, он обращается к ним по номеру Dstorage
.
Итак, короче говоря, вы не можете использовать вызываемый объект, который возвращает экземпляр (вид псевдокласса) вместо класса здесь, потому что Fuse анализирует объект, который вы установили, чтобы найти методы, которые он должен вызывать ,
Вам необходимо назначить класс для file_class
- если вам нужно вернуться к родительскому экземпляру, вы можете использовать трюк с вложенным классом, который они показывают в документах.