В настоящее время у меня есть @classmethod
, который возвращает правильный класс с заданной переменной. Это выглядит примерно так:Имейте класс для инициализации объекта из другого класса
class Parent():
@classmethod
def GetInstance(cls, variable):
if variable == 'foo':
return Child()
class Child(Parent):
def Something(self):
pass
instance = Parent.GetInstance('foo')
result = instance.Something()
Я предпочитаю не определить и использовать GetInstance
. Вместо этого, я хотел бы, чтобы Main()
просто:
instance = Parent('foo')
result = instance.Something()
Сохраняя все преимущества структуры выше. Я хочу, чтобы класс Parent()
возвращал объект класса Child()
при вызове без использования метода. __init__
, к сожалению, не помогает, поскольку он ничего не может вернуть. Есть идеи?
Вы можете использовать '__new__', но во многих случаях вам лучше просто написать заводскую функцию. – BrenBarn
Да, модель класса Python не просто поддерживает это. Я не могу придумать способ, потому что, как вы выяснили, '__init__' не любит« возвращать »вещи. Просто используйте фабричный шаблон ... это хорошо известно. –
@BrenBarn Да, я полагаю, вы могли бы использовать '__new__'. Это было бы полностью переработанное решение проблемы без проблем. Это было бы совершенно неожиданно для любого, кто использует ваш «класс». –