Wie löse ich diesen zirkulären Import?Python

Python-Programme
Anonymous
 Wie löse ich diesen zirkulären Import?

Post by Anonymous »

Bei der Implementierung eines virtuellen Dateisystems stoße ich auf ein zirkuläres Importproblem.
common.py:

Code: Select all

from typing import TYPE_CHECKING

if TYPE_CHECKING:
from .directory import Directory
from .archive import Archive

class VFile:
def __init__(self, data: bytes, parent: Directory | Archive ...):
...
archive.py:

Code: Select all

from .util import guess_type

class Archive(VFile):
def _read(self):
for m in metadata:
data = ...
FileType = guess_type(data)
self.files.append(FileType(data, self))
...
directory.py:

Code: Select all

from .util import guess_type

class Directory(VFile):
def _parse_btree(self):
FileType = guess_type(data)
self.files.append(FileType(data, self))
...
util.py:

Code: Select all

from .common import VFile
from .archive import Archive
from .directory import Directory

def guess_type(data: bytes) -> type[VFile]:
if is_archive(data):
return Archive
if is_dir(data):
return Directory
...
return VFile

Code: Select all

TYPE_CHECKING
löst einen Teil des Problems, aber den Rest kann ich nicht lösen, ohne alle Dateien zu einer zu verketten. Wie kann ich das umgestalten?
Typehint-Rundschreiben ist hier nicht relevant. Ein echtes Rundschreiben ist Archive, das „guesse_type()“ aufruft, das auf „Archive“ verweist, und „Directory“ ruft außerdem „guesse_type()“ auf, das auf das Verzeichnis verweist.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post