这个问题不是讨论单身人士设计模式是否可取,反模式,还是任何宗教战争,而是讨论如何以最蟒蛇的方式在Python中最好地实现这种模式.在这种情况下,我将"最pythonic"定义为表示它遵循"最小惊讶原则".
我有多个类可以成为单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望在添加gumph的几个类中混乱.
最好的方法:
def singleton(class_):
instances = {}
def getinstance(*args, **kwargs):
if class_ not in instances:
instances[class_] = class_(*args, **kwargs)
return instances[class_]
return getinstance
@singleton
class MyClass(BaseClass):
pass
Run Code Online (Sandbox Code Playgroud)
优点
缺点
m = MyClass(); n = MyClass(); o = type(n)();那时m == n && m != o && n != oclass Singleton(object):
_instance = None
def __new__(class_, *args, **kwargs):
if not isinstance(class_._instance, class_):
class_._instance = object.__new__(class_, *args, **kwargs)
return class_._instance
class MyClass(Singleton, …Run Code Online (Sandbox Code Playgroud) 似乎有很多方法可以在Python中定义单例.Stack Overflow是否有共识?
我是python编程的新手,我有一个类,对于这个类,我创建了一个对象(obj1).i不想创建除此对象之外的其他对象,如果有任何体想要为此类创建一个应该引用的对象到第一个对象(而不是再创建一个对象).如何做到这一点?请参考以下代码?
Run Code Online (Sandbox Code Playgroud)class MyClass: def __init__(self): pass obj1=MyClass()//create object obj2=MyClass()//avoid creation and refer obj2 to obj1 obj3=MyClass()//avoid creation and refer obj3 to obj1
我在pygame中制作了一个简单的游戏,我意识到我需要一堆标记,数量和各种全球员工.所以我决定定义一个类并像这样使用它:
class Staff():
def __init__(self):
self.modes={'menu':True,'spawning':False,'sprite_change':False}
self.timer=pygame.time.Clock()
self.tick_count=0
Run Code Online (Sandbox Code Playgroud)
在我的游戏循环中,我只给我的所有函数一个变量:
def main_loop():
staff=Staff()
while not done:
update_positions(staff)
clear_background(staff)
draw_sprites(staff)
Run Code Online (Sandbox Code Playgroud)
我知道这种方法很有效(对我而言),但是我想知道这会影响我游戏的速度,可能是我在做一些可怕的事情?非常感谢您的回答.
例如:
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编程相当新,因此我解决问题的方法可能不正确,如果是这种情况请告诉我.
我试图使用Singleton类在我的代码中存储配置参数,并在需要时使用它.我遇到一个问题,即初始创建中存储在Singleton中的数据不会保留在对Object的后续调用中.
也许我创建Singleton对象的方式不正确,但我正在关注SO上的代码示例.
首先是我的Singleton课程
class Config(object):
__instance = None
dbserver = ""
def __new__(cls):
if cls.__instance == None:
__instance = object.__new__(cls)
__instance.name = "Configuration Object"
return __instance
Run Code Online (Sandbox Code Playgroud)
这是我最初创建的Singleton实例
configurator = Config()
configurator.dbserver = dbserver
Run Code Online (Sandbox Code Playgroud)
然后我执行以下操作,dbserver属性返回空字符串.
configurator = Config()
print configurator.dbserver
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间阅读.