Создание синглтона в Python

Я ответил на аналогичные вопросы в jquery ui - как использовать google CDN

Вы можете сделать вызов, используя

 


Вы также можете ссылку на другие темы Ui, изменив название темы. В этом случае измените базу имен на любое другое название темы /base/jquery-ui.css на любую другую тему.


Проверьте блог jQuery UI для ссылки всех ссылок CDN http://blog.jqueryui.com/

Если вы хотите чтобы вернуться на ваш компьютер в случае неудачи Google, вы можете сделать



774
задан hxysayhi 28 June 2017 в 08:30
поделиться

3 ответа

  • , Если Вы хотите иметь, несколько нумеруют экземпляров того же класса, но только если args или kwargs отличаются, можно использовать это
  • Напр.
    1. , Если у Вас есть класс, обрабатывающий serial коммуникация, и создать экземпляр, Вы хотите отправить последовательный порт, поскольку аргумент, затем с традиционным подходом не будет работать
    2. Используя вышеупомянутых декораторов, можно создать несколько экземпляров класса, если args отличаются.
    3. Для того же args, декоратор возвратит тот же экземпляр, который уже явлен создан.
>>> from decorators import singleton
>>>
>>> @singleton
... class A:
...     def __init__(self, *args, **kwargs):
...         pass
...
>>>
>>> a = A(name='Siddhesh')
>>> b = A(name='Siddhesh', lname='Sathe')
>>> c = A(name='Siddhesh', lname='Sathe')
>>> a is b  # has to be different
False
>>> b is c  # has to be same
True
>>>
0
ответ дан 22 November 2019 в 21:14
поделиться

Возможно, я неправильно понимаю шаблон "одиночка", но мое решение - это простое и прагматичное (pythonic?). Этот код выполняет две цели

  1. , Делают экземпляр Foo accessiable везде (глобальный).
  2. Только один экземпляр Foo может существовать.

Это - код.

#!/usr/bin/env python3

class Foo:
    me = None

    def __init__(self):
        if Foo.me != None:
            raise Exception('Instance of Foo still exists!')

        Foo.me = self


if __name__ == '__main__':
    Foo()
    Foo()

Вывод

Traceback (most recent call last):
  File "./x.py", line 15, in <module>
    Foo()
  File "./x.py", line 8, in __init__
    raise Exception('Instance of Foo still exists!')
Exception: Instance of Foo still exists!
0
ответ дан 22 November 2019 в 21:14
поделиться

После борьбы с этим в течение некоторого времени я в конечном счете придумал следующее, так, чтобы объект конфигурации был только загружен однажды при звонке от отдельных модулей. Метакласс позволяет глобальному экземпляру класса быть сохраненным в builtins dict, который в настоящее время, кажется, самый опрятный способ сохранить надлежащую глобальную программу.

import builtins

# -----------------------------------------------------------------------------
# So..... you would expect that a class would be "global" in scope, however
#   when different modules use this,
#   EACH ONE effectively has its own class namespace.  
#   In order to get around this, we use a metaclass to intercept
#   "new" and provide the "truly global metaclass instance" if it already exists

class MetaConfig(type):
    def __new__(cls, name, bases, dct):
        try:
            class_inst = builtins.CONFIG_singleton

        except AttributeError:
            class_inst = super().__new__(cls, name, bases, dct)
            builtins.CONFIG_singleton = class_inst
            class_inst.do_load()

        return class_inst

# -----------------------------------------------------------------------------

class Config(metaclass=MetaConfig):

    config_attr = None

    @classmethod
    def do_load(cls):
        ...<load-cfg-from-file>...
0
ответ дан 22 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: