Последствия изменения __type__ - PullRequest
0 голосов
/ 21 октября 2010

Я пытаюсь создать то, что вера (по моему невежеству) известна как фабрика классов. По сути, у меня есть родительский класс, который я хотел бы принять аргумент __init__ и стать одним из нескольких дочерних классов. Я нашел пример этого рекомендуемого в StackOverflow здесь , и это выглядит так:

class Vehicle(object):
  def __init__(self, vtype):
    self.vtype = vtype
    if vtype=='c':
      self.__class__ = Car
    elif vtype == 't':
      self.__class__ = Truck

Я слышал , что изменение __type__ может быть опасным. Есть ли негативные подходы к этому подходу? Я бы использовал функцию для динамического создания объектов, но она не будет работать с существующим кодом, который я использую. Ожидается класс, в котором я планирую выполнить динамическое изменение типа.

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Я думаю, что фабрика классов определяется как вызываемая функция, которая возвращает класс (не экземпляр):

def vehicle_factory(vtype):
    if vtype == 'c':
        return Car
    if vtype == 't':
        return Truck

VehicleClass = vehicle_factory(c)
vehicle_instance_1 = VehicleClass(*args, **kwargs)
VehicleClass = vehicle_factory(t)
vehicle_instance_2 = VehicleClass(*args, **kwargs)
0 голосов
/ 21 октября 2010

Не делай так. Вместо __new__().

...