Я читал документацию, описывающую наследование классов, абстрактные базовые классы и даже интерфейсы Python.Но ничто не похоже на то, что я хочу.А именно, простой способ построения виртуальных классов.Когда виртуальный класс вызывается, я хотел бы, чтобы он создал экземпляр более специфического класса, основанного на параметрах, которые ему переданы, и передал его обратно вызывающей функции.На данный момент у меня есть сводный способ перенаправления вызовов к виртуальному классу вниз к базовому классу.
Идея заключается в следующем:
class Shape:
def __init__(self, description):
if description == "It's flat": self.underlying_class = Line(description)
elif description == "It's spiky": self.underlying_class = Triangle(description)
elif description == "It's big": self.underlying_class = Rectangle(description)
def number_of_edges(self, parameters):
return self.underlying_class(parameters)
class Line:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 1
class Triangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 3
class Rectangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 4
shape_dont_know_what_it_is = Shape("It's big")
shape_dont_know_what_it_is.number_of_edges(parameters)
Мое изменение маршрута далеко не оптимально, так каквызовы функции number_of_edges () передаются.Добавление чего-то подобного в Shape также не помогает,
def __getattr__(self, *args):
return underlying_class.__getattr__(*args)
Что я делаю не так?Вся идея плохо реализована?Любая помощь с благодарностью.