Python单例写法

今天无意间看那了zabbix封装的api源码,其中一个单例写法很装X,记录如下:

class ZabbixAPI(object):
auth = ‘’ id = 0
_state = {}

def __new__(cls, *args, **kw):
    if not cls._state.has_key(cls):
        cls._state[cls] = super(ZabbixAPI, cls).__new__(cls, *args, **kw)

    return cls._state[cls]

def __init__(self, url, user, password):
    self.__url = url.rstrip('/') + '/api_jsonrpc.php'
    self.__user = user
    self.__password = password
    self._zabbix_api_object_list = ('Action', 'Alert', 'APIInfo', 'Application', 'DCheck', 'DHost', 'DRule',
            'DService', 'Event', 'Graph', 'Grahpitem', 'History', 'Host', 'Hostgroup', 'Image', 'Item',
            'Maintenance', 'Map', 'Mediatype', 'Proxy', 'Screen', 'Script', 'Template', 'Trigger', 'User',
            'Usergroup', 'Usermacro', 'Usermedia')