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 ...):
...
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))
...
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))
...
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_CHECKINGTypehint-Rundschreiben ist hier nicht relevant. Ein echtes Rundschreiben ist Archive(), das „guesse_type()“ aufruft, was auf „Archive()“ verweist, und „Directory()“ ruft auch „guesse_type()“ auf, das auf „Directory()“ verweist.
Mobile version