Как объявить элементы в базовом классе а инициализировать в наследниках?

Имеются один родитель и три наследника, и необходимо объявить элемент a в родительском в классе а инициализировать в дочерних.

class polyhedron:
    ...


class tetrayder(polyhedron):
    def __init__(self):
        ...


class dodecayder(polyhedron):
    def __init__(self):
        ...


class ikosyder(polyhedron):
    def __init__(self):
        ...

Ответы (2 шт):

Автор решения: S. Nick

Попробуйте так:

#  `a` в родительском в классе
class PolyheDron:
    a = 42


class Tetrayder(PolyheDron):
    def __init__(self):
        super().__init__()
        pass

tetrayder = Tetrayder()
№ tetrayder.a  # 42

b = tetrayder.a
print(b)
→ Ссылка
Автор решения: Михаил Муругов
import abc  # Модуль для работы с абстрактными классами


class Polyhedron(abc.ABC):  # Объявляем абстрактный класс Многогранник
    @property  # Свойство
    @abc.abstractmethod  # Должно быть определено в каждом наследнике
    def edge_count(self):  # Объявляем, что в каждом многограннике должно быть определено количество граней
        pass


class Tetrahedron(Polyhedron):  # Объявляем Тетраэдр, который является Многогранником
    edge_count = 4  # Говорим, что у него 4 грани


class Dodecahedron(Polyhedron):  # Объявляем Додекаэдр, который тоже является Многогранником
    edge_count = 12  # Говорим, что у него 12 граней


class Icosahedron(Polyhedron): # Объявляем Икосаэдр
    edge_count = 30  # Говорим, что у него 30 граней

Таким образом мы объявили абстрактный класс Многогранник, который сам по себе нельзя инстанцировать, но от него можно унаследоваться и определить, сколько у наследника-конкретной фигуры граней. Если же мы унаследуемся от многогранника и не определим, сколько у наследника граней, то получим ошибку, т.к. это обязательное свойство.

→ Ссылка