Код: Выделить всё
from abc import ABC, ABCMeta, abstractmethod
from functools import cache
from pathlib import Path
from warnings import warn
class DatasetMetaClass(ABCMeta):
r"""Meta Class for Datasets"""
@property
@cache
def metaclass_property(cls):
r"""Compute an expensive property (for example: dataset statistics)."""
warn("Caching metaclass property...")
return "result"
# def __dir__(cls):
# return list(super().__dir__()) + ['metaclass_property']
class DatasetBaseClass(metaclass=DatasetMetaClass):
r"""Base Class for datasets that all datasets must subclass"""
@classmethod
@property
@cache
def baseclass_property(cls):
r"""Compute an expensive property (for example: dataset statistics)."""
warn("Caching baseclass property...")
return "result"
class DatasetExampleClass(DatasetBaseClass, metaclass=DatasetMetaClass):
r"""Some Dataset Example."""
Я заметил, что это так. не произойдет, если я сделаю это свойством метакласса, потому что свойство метакласса не отображается в вызове классов __dir__, что может быть, а может и не быть ошибкой. Добавление его в __dir__ вручную путем раскомментирования двух строк приводит к тому, что sphinx также обрабатывает свойство метакласса.
Вопросы:
- Это ошибка в Sphinx? Учитывая, что @properties обычно обрабатываются нормально, кажется непреднамеренным, что он нарушается для @classmethod@property.
- Какой вариант лучше всего - на данный момент - чтобы избежать этой проблемы? Могу ли я как-то сказать Sphinx не анализировать эту функцию? Я надеюсь, что есть возможность либо отключить sphinx для функции с помощью комментария, аналогичного # noqa, # type: ignore, # pylint Disable= и т. д., либо с помощью какого-либо @ nodoc декоратор.
Подробнее здесь: https://stackoverflow.com/questions/683 ... d-property
Мобильная версия