Код: Выделить всё
classonlymethod
Код: Выделить всё
from typing import Concatenate, Self
from collections.abc import Callable
from functools import partial
class classonlymethod[C, **P, R]:
def __init__(self, func: Callable[Concatenate[type[C], P], R], /):
self._func = func
def __get__(self, instance: None, owner: type[C], /) -> Callable[P, R]:
if instance is not None:
raise AttributeError('class-only method')
return partial(self._func, owner)
class Foo:
@classonlymethod
def bar(cls: type[Self]) -> None:
raise NotImplementedError()
Тип параметра "cls" должен быть супертип его класса "foo" (отчетггеналтипейсы)
Подробнее здесь: https://stackoverflow.com/questions/796 ... -in-python