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