Ошибка в factory. Как исправить? Помогите пожалуйста исправить ошибку. Я пытаюсь применить на практике шаблон проектирования "Фабрика". from datetime import datetime, date, time
class GameElement(object):
def __init__(self, name):
self.name = name
class Boat(GameElement):
def __init__(self, name, peoples, speed, color, oars):
GameElement.__init__(self, name)
self.peoples = peoples
self.speed = speed
self.color = color
self.oars = oars
Boat.quantity += 1
quantity = 0
def __str__(self):
return str(self.__class__.__name__) + ': ' + str(self.__dict__)
class Raft(GameElement):
def __init__(self, name, peoples, speed, color, sails):
GameElement.__init__(self, name)
self.peoples = peoples
self.speed = speed
self.color = color
self.sails = sails
Raft.quantity += 1
quantity = 0
def __str__(self):
return str(self.__class__.__name__) + ': ' + str(self.__dict__)
class BoatsGenerator(object):
def factory(self, name, peoples, speed, color, oars):
print(str(name) + '::' + 'created boat')
#return Boat(name, peoples, speed, color, oars)
class RaftsGenerator(object):
def factory(name, peoples, speed, color, sails):
print(str(name) + '::' + 'created raft')
#return Raft(name, peoples, speed, color, sails)
class World(object):
def __new__(cls,*dt,**mp):
if cls.obj is None:
cls.obj = object.__new__(cls,*dt,**mp)
World.quantity += 1
boat1 = BoatsGenerator.factory(name='beda', peoples=8, speed=110, color='red', oars=2)
raft1 = RaftsGenerator.factory(name='abibas', peoples=3, speed=5, color='maroon', sails=0)

print(boat1)
print(raft1)
return cls.obj
obj = None
quantity = 0
def __str__(self):
return str(self.__class__.__name__) + ': ' + str(self.__dict__)
world1 = World()
world1.creared_at = datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
print(world1)
print('worlds quantity: ' + str(World.quantity))
В этом коде есть классы для объектов Boat и Raft, а так же фабрики для каждого из них(BoatsGenerator, RaftsGenerator). Сама процедура создания происходит в инициализаторе класса World. В результате должно получиться 2 объекта, но у меня консоль выводит сообщение об ошибке:kalinin@kalinin ~/python/boats3 $ python index.py
Traceback (most recent call last):
File "index.py", line 74, in
world1 = World()
File "index.py", line 58, in __new__
boat1 = BoatsGenerator.factory(name='beda', peoples=8, speed=110, color='red', oars=2)
TypeError: unbound method factory() must be called with BoatsGenerator instance as first argument (got nothing instead)

21 Авг 2019 в 07:06
218 +1
0
Ответы
1

Чтобы исправить эту ошибку, вы должны вызывать метод factory с помощью экземпляра класса BoatsGenerator. Для этого нужно создать экземпляр класса BoatsGenerator в методе new класса World.

Вот как вы можете это сделать:

Измените метод new класса World следующим образом:class World(object):
def __new__(cls,*dt,**mp):
if cls.obj is None:
cls.obj = object.__new__(cls,*dt,**mp)
World.quantity += 1
boatsGenerator = BoatsGenerator()
boat1 = boatsGenerator.factory(name='beda', peoples=8, speed=110, color='red', oars=2)
raftsGenerator = RaftsGenerator()
raft1 = raftsGenerator.factory(name='abibas', peoples=3, speed=5, color='maroon', sails=0)
print(boat1)
print(raft1)
return cls.obj Исправьте определение метода factory в классах BoatsGenerator и RaftsGenerator, чтобы он стал статическим методом:class BoatsGenerator(object):
@staticmethod
def factory(name, peoples, speed, color, oars):
print(str(name) + '::' + 'created boat')
#return Boat(name, peoples, speed, color, oars)
class RaftsGenerator(object):
@staticmethod
def factory(name, peoples, speed, color, sails):
print(str(name) + '::' + 'created raft')
#return Raft(name, peoples, speed, color, sails)

После внесения этих изменений ваш код должен работать правильно и создавать объекты Boat и Raft через соответствующие фабрики.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир