非常感谢您迄今为止给我的建议.使用测试平台是这个论坛真正向我展示的亮点,因为我很感激.我的问题是我正在玩一个单身人士,通常我不会对它进行分析,但在测试平台中我需要这样做.所以有人能告诉我如何去做这件事吗?我已经开始使用一个基本示例并将其构建到测试平台中,以便我可以看到最新情况.现在我不知道怎么摆脱它!
非常感谢!!
import sys
import logging
import unittest
LOGLEVEL = logging.DEBUG
class Singleton:
""" A python singleton """
class __impl:
""" Implementation of the singleton interface """
def __init__(self):
self.log = logging.getLogger()
self.log.debug("Init %s" % self.__class__.__name__)
def id(self):
""" Test method, return singleton id """
return id(self)
# storage for the instance reference
__instance = None
def __init__(self):
""" Create singleton instance """
# Check whether we already have an instance
if Singleton.__instance is None:
# Create and …Run Code Online (Sandbox Code Playgroud) 想象一个系统(Python),其中不同的部分不断地与给定对象的一个实例交互.为此实例提供全局访问点的最佳方法是什么?
到目前为止,我只能想到建设中的(辛格尔顿)实例__init__.py和import模块的需要:
# __init__.py
class Thing(object, Singleton):
pass
TheThing = Thing()
__all__ = ['TheThing']
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来提供全局访问点TheThing?
谢谢,
J.
目前我正在使用一个相当简单的单例实现.但是,我从来没有在网上看到过这样的建议,这让我觉得它可能有问题......
class Singleton:
def __init__():
raise ...
@staticmethod
def some():
pass
@staticmethod
def another():
pass
Run Code Online (Sandbox Code Playgroud)
单例的这种实现是否有任何缺点(使所有类成员都是静态的).它有点类似于使用模块作为单例,除了你把所有东西都包装在一个类中.
编辑:我知道在Python中实现单例的其他方法.我不喜欢它们的是它们都不是显式的(这违背了Python zen):
因为我做的a = Class()不是类似的事情a = Class.Instance(),所以我在处理具有共享状态的对象时并不明显(参见注释#1).如果所有成员都是静态的,我至少有Class.someMethod()哪种类型表明它是单身.我不喜欢这种方法的是你不能使用构造函数和析构函数,它消除了单例对自由函数的主要优势,这是你在创建和销毁它们时可以做的事情(参见注释#2) .
注意#1:我知道我不应该关心单身人士的状态(如果我这样做,那么它首先不应该是单身人士).我仍然希望明确它是什么类.
注意#2:创建单例时,可以在其构造函数中进行一些实例化.例如,在处理图形库的单例中,您可以在constrctor中初始化库.这种方式实例化和解除实例在sinleton的构造函数和析构函数中自动发生.
或者在ResourceManager中:析构函数可以检查在销毁时是否仍然存在内存中的资源并相应地执行操作.
如果你使用自由函数而不是单例,你必须手动完成所有这些.
例如:
match = re.search('...', str, re.IGNORECASE)
if match is not None:
pass
# or
if match != None:
pass
Run Code Online (Sandbox Code Playgroud)
什么是更好的?
我的代码是:
class Handler():
# make it static
from pymongo import MongoClient
client = MongoClient("localhost", 27017)
db = client.newsdb
news = db.news
Run Code Online (Sandbox Code Playgroud)
我想让 client 变量成为静态变量,那么上面的代码是正确的方法吗?我也想使用单例模式,因为也许 MongoClient 是非常大的元素,当我真正需要它时我想 new() 这个元素......
我怎样才能在 python 中做到这一点?作为一个初学者,可能会问一些愚蠢的问题,提前抱歉......
在Python中如何实现单属性it.Please以下class.What我基本上是想了解提供了一个例子一类是,如果存在的话类的实例,它应该返回现有实例创建其他的实例那个班
class Test:
name
age
def getobj(self):
return (self.name+self.age)
t= Test()
Run Code Online (Sandbox Code Playgroud)