Значения в скобках у класса

Рейтинг: 3Ответов: 2Опубликовано: 22.05.2023

Только начал изучать Python и столкнулся с конструкцией типа:

class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"

Знаю, что в скобках обычно указывается класс, от которого мы наследуемся, но что в данном случае значат эти два выражения в рамках этого класса?

Ответы

▲ 6Принят

Класс ModelName наследует от двух других классов(str, Enum). То есть объектам класса ModelName будут доступны все атрибуты и методы наследуемых классов, помимо собственных. Вы можете убедится в этом, используя точечное обращение к объекту после его инициализации:

my_object = ModelName()
my_object.

Или print(dir(my_object)) - выведет список всех атрибутов и методов объекта.

▲ 1

Это означает то, что класс наследовал у. str и Enum и имеет их же атрибуты. Тем самым, мы можем воспользоваться одним из их атрибутов:

from enum import Enum
from typing import SupportsIndex


class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"

    def split(self, sep: str | None = ..., maxsplit: SupportsIndex = ...) -> list[str]:
        pass