Jump to content
  • 0

синглтон копируется


cyklop77
 Share

Question

помогите пожалуйста разобраться с синглтоном на python:

 

код:

class World(object):  def __new__(cls,*dt,**mp):      if cls.obj is None:          cls.obj = object.__new__(cls,*dt,**mp)      return cls.obj   def __init__(self, name, boss):    self.boss = boss    self.name = name    World.quantity += 1  obj = None  quantity = 0  def __str__(self):    return str(self.__class__.__name__) + ': ' + str(self.__dict__)

дальше через командную строку я создаю 2 объекта:

world1 = World('old', boss='demiurg')world2 = World('new', boss='mr. bin')

и ожидаю, что будет создан объект с атрибутом boss='demiurg', а все последующие экземпляры будут просто ссылаться на этот объект

 

но в результате я получаю объект с атрибутом boss='mr. bin' :

kalinin@kalinin ~/python/boats2 $ python index2.pyWorld: {'name': 'new', 'boss': 'mr. bin'}World: {'name': 'new', 'boss': 'mr. bin'}worlds quantity: 2

мне непонятно как объект, которые создался в первую очередь(boss='demiurg') потом был перезаписал объектом с 'boss': 'mr. bin'

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

На первый взгляд всё ок. world1 is world2 должно вернуть True. Ну и объект не перезаписан, перезаписаны свойства, что совершенно нормально.


P.S. Суть синглтона же в том, чтобы был один и только один инстанс. Он и есть один. Просто ты два раза вызываешь к одному и тому же инстансу метод __init__ с разными аргументами, в результате чего свойства объекта изменяются.

  • Like 1
Link to comment
Share on other sites

  • 0

1) я ничего не понимаю в питоне (пайтоне, кому как нравится)

2) вообще синглтон подразумевает, что у вас может быть только один экземпляр класса, странно что вам вообще удаётся создать мистера бина

Link to comment
Share on other sites

  • 0

в общем я тут наколбасил. извиняюсь, что такую дичь запостил. метод __init__ лишний. хотя я до сих пор не понял почему

 

правильно будет приблизительно так: 

........................class World(object):  def __new__(cls,*dt,**mp):    if cls.obj is None:      cls.obj = object.__new__(cls,*dt,**mp)      World.quantity += 1      boat1 = Boat(name='beda', peoples=8, speed=110, color='red', oars=2)      boat2 = Boat(name='pobeda', peoples=10, speed=120, color='green', oars=2)      raft1 = Raft(name='zevs', peoples=2, speed=10, color='yellow', sails=1)      raft2 = Raft(name='abibas', peoples=3, speed=5, color='maroon', sails=0)      raft3 = Raft(name='qwerty', peoples=1, speed=12, color='orange', sails=1)      ocean1 = Ocean(name='north', temperature=-20)      ocean2 = Ocean(name='india', temperature=10)               print(boat1)      print(boat2)      print('boats quantity: ' + str(Boat.quantity))      print(raft1)      print(raft2)      print(raft3)      print('rafts quantity: ' + str(Raft.quantity))      print(ocean1)      print(ocean2)      print('oceans quantity: ' + str(Ocean.quantity))                     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))

но спасибо за попытку помочь

Edited by cyklop77
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By kuzia007
      Пример сайта по разработке reactiq точка net 
      Цена на разработку 70 000 рублей. Без дизайна и верстки, от вас нам нужен функционал 
      на фреймворке Lavarel 
      Нужно постараться уложиться в 20 дней по срокам. 
      Работа по Сделке без риска. B и больше ни как. 

      Основные моменты работы сайта: 
      авторизация сайта через стим 
      считывания апи через официальный сайт pubg 
      Трейдов скинов и все остальное не будет! 
      подключить систему оплат 
      создание личного кабинета для пользователя. 
      Есть полное ТЗ проекта, которое мы готовы упрощать на первом этапе.
      Готовы достойно оплачивать ваш труд! 
      Пишите в телеграм @evgensalyah
    • By kuzia007
      Ищем талантливого программиста в игровой проект
      Для разработки игрового проекта требуются талантливые программисты.
      Отличное знание: PHP, JavaScript, Python
      Преимуществом будет если когда-то работали с платформой steam и с голосовым мессенджером Discord.

      Вкратце о проекте: Будет разрабатываться площадка для проведения турниров по играм pubg, dota, cs go.
      Ищем программиста с руками. Не важно какой вы ориентации, вероисповедания и т.д. Нам от вас важен результат!
      Готовы достойно оплачивать ваш труд! 
      Пишите в телеграм @evgensalyah
    • By Кирилл Марченко
      Предлагаю услуги Агентства по развитию бизнеса “НеКидаем.ру”
      Наша компания занимается:
      - Оптимизацией загрузки сайта
      - Созданием Landing Page (посадочной страницы)
      - Аудитом маркетинговой кампании
      - Юзабилити аудит сайта
      - Переводом сайта к адаптивному виду
      - Переводом сайтов на HTTPS
      - Созданием сайтов
      - Продвижением сайта в поисковых системах (SEO)
      - Продвижением в социальных сетях
      - Контекстной рекламой

      Из последних наших проектов:
      биржа рекламы на частных автомобилях;
      биржу спроса, где можно заказывать услуги и товары по собственным ценам;
      агрегатор по грузоперевозкам;
      биржа рекламы в социальных сетях;
      интернет-магазин искусственных цветов;
      интернет-магазин овощей и  фруктов;

      По запросу, готовы предоставить портфолио выполненных проектов.

      Основные технологии, при помощи которых ведется разработка: Django•Python•PostgreSQL•Backbone.js•Ubuntu•Celery •Redis•Rabbitmq•Javascript

      Ждем Ваших откликов на эл. почту info@alfacvet.ru
    • By Кирилл Марченко
      В агентство по развитию бизнеса NeKidaem.ru требуется ответственный и грамотный сотрудник на должность back-end разработчика Python / Django.
      Мы гарантируем крутой воркфлоу, помощь в освоении нового и интересные задачи.
       
      Ты будешь принимать непосредственное участие в разработке проектов уровня сложности:
      jata.ru  - реклама на частных автомобилях;
      cupidus.ru - заказ услуг и товаров по собственным ценам;
      groozgo. ru - агрегатор по грузоперевозкам;
      optostack.ru - оптосток - твой главный инструмент по работе с Avito
       
      Ты будешь работать под управлением разработчика, принимавшего непосредственное и самое активное участие в разработке sociate.ru
       
      У нас есть задачи под любой уровень разработки, а потому если ты:
      junior-разработчик, то пиши нам, мы прокачаем твои навыки под руководством опытного наставника!
      middle-разработчик, тебе гарантированы сложные, интересные задачи, с огромным полем профессионального роста.
      для pro-разработчиков у нас так же есть нетривиальные проекты. Непростые, где понадобиться весь твой опыт и очень интересные. Пиши!
       
      Обязанности:
      - Проектирование и разработка на Python нового функционала;
      - Рефакторинг, унификация и поддержание в работоспособном состоянии имеющейся кодовой базы;
      - Работа в команде, активная работа над интересными и сложными проектами.
       
      Требования:
      - Здоровая инициатива.
      - Ответственность, внимательность, умение признавать свои косяки и их исправлять.
      - Уверенное знание: Django, Django-Rest-Framework, PostgreSQL, Celery;
      - Опыт написания и поддержки тестов (unittest, mock);
      - Владение Linux (Debian / Ubuntu) на уровне уверенного пользователя;
      - Понимание основ Nginx-конфигурирования;
      - Быть на связи в рабочее время;
      - Вести отчет по своим задачам в Trello.
       
      Будет плюсом:
      - Опыт работы по Scrum-методологии, а также применения Continuous Integration (Jenkins, TeamCity);
      - Опыт работы с Ansible, Fabric;
      - Опыт командной работы с Git.
       
      Условия:
      - Обсуждаемый рабочий график.
      На начальный период приемлема частичная занятость, далее полная, т.к. проектов и клиентов у нас всегда очень много.
      - Без проблем удаленная работа.
      - Работа в дружном и технически грамотном коллективе. Владельцы агенства NeKidaem.ru являются менторами и экспертами технопарка и бизнес-инкубатора Ингрия.
       
      Оплата:
      Оклад определяется твоими начальными навыками и определяется после выполнения тестового задания и периодически пересматривается на предмет повышения в зависимости от твоих успехов.
       
      Хочешь занять вакансию разработчика? Тогда сделай 4 простых шага:
       
      1. Резюме отправлять по адресу info@nekidaem.ru с заголовком «Вакансия back-end разработчика Python».
      В отклике на вакансию обязательно должны быть обозначены твои пожелания по оплате и количество рабочих часов в неделю, которые ты сможешь уделять полноценной разработке.
      2. В ответ на твое письмо будет выслано тестовое задание.
      3. Будет весомым плюсом, если к резюме ты приложишь рассказ о себе в свободной форме, логин в скайпе/номер телефона, ссылки на твои профили в вк/фб и гитхабе.
      4. Общаемся лично в скайпе и обсуждаем условия нашего сотрудничества.
    • By twentyfive_agency
      Мы достаточная слаженная команда и работаем как единый механизм.
      Все члены команды обладают достаточной компетенцией, чтобы выполнять работы разного уровня сложности.
      Сейчас у нас в команде:
      4 Технолога/Верстальщика (html5, css3, javascript, reat, angular) 2 Проектировщика/Дизайнера (invision, photoshop, illustrator, sketch) 3 Бэкенд разработчика (php, nodejs, python + работа со всеми известными cms,crm-системами) 4 Мобильных разработчика (1 iOs, 1 Android) 2 Тестировщика Каждый из членов команды четко понимает ответственность за проект!
      Все задачи ведем в Basecamp, Trello и JIRA, и всегда добавляем туда заказчика, чтобы формировалась прозрачность работы.
      Процесс работы по проектам у нас такой:
      Получаем задание Оцениваем сроки и стоимость, предоставляем информацию в электронном виде заказчику. Согласуем эти данные или вносим корректировки. Подписываем договор (с нашей стороны ИП) Получаем аванс по договору Начинаем работу по проекту Ведем разработку проекта Показываем финальную итерацию заказчику и запускаем проект в продакшн. Остаемся довольными сотрудничеством и получаем отзывы по работе, слаженности и о качестве проекта в целом. Рейты работы наших специалистов:
      Проектирование/Дизайн // 700-800 руб/час Верстка/js  // 700-800 руб/час Программирование (бэкенд) // 700-1000 руб/час Тестирование // 400-650 руб/час Разработка приложений (iOS, Android) // 1000-1400 руб/час Мы работаем над тем, чтобы:
      Заказчик всегда был уверен в том, что сроки по проекту не выйдут за согласованные. Заказчик был уверен в том, что качество работ будет проведено на высшем уровне. Заказчик похвалил нас и сказал, что вернется еще или останется с нами на техподдержку. Наши работы:
      http://greenjam.ru http://tuborg.ru http://k1664.ru http://corny.ru http://megalabs.ru http://prostude.net http://ecorse.education http://eqeducation.org http://dadacreative.com http://tfg.ru/ http://pirelli.autonews.ru/ http://id-direct.ru http://localway.ru  
       
      Twenty Five Agency
      twentyfive.agency
      Georgy Pantsulaya, CEO
      via phone: +7-989-536-00-35
      via skype: hello@twentyfive.agency
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy