Как объявить элементы в базовом классе а инициализировать в наследниках?
Имеются один родитель и три наследника, и необходимо объявить элемент 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 граней
Таким образом мы объявили абстрактный класс Многогранник, который сам по себе нельзя инстанцировать, но от него можно унаследоваться и определить, сколько у наследника-конкретной фигуры граней. Если же мы унаследуемся от многогранника и не определим, сколько у наследника граней, то получим ошибку, т.к. это обязательное свойство.