python中使用兩種方式實現單例模式

2021-10-07 15:52:35 字數 1925 閱讀 9359

#coding=utf8

import os

import sys

"""@author: xuwentao

date:

2020.06

.30function: singleton model

language:python3

""""""

單例模式實現1: 使用類方法和類屬性來實現

"""class singleton

(object)

: def __init__

(self,

*args,

**kwargs)

: pass

@classmethod

def singleton

(cls)

: # 把例項封裝成私有屬性

if not hasattr

(singleton,

'_instance'):

singleton._instance =

cls(

) # 這裡也可以寫singleton()

return singleton._instance

"""單例模式實現2:使用python內部建立物件的機制

知識點:python建立物件的過程,在python例項化物件的時候,先會執行__new__

(cls)的方法,為建立的物件開闢

一段新的記憶體,然後呼叫__init__來為這個新的物件執行初始化操作

所以在__new__時候需要保證每次開闢的物件都一樣就可以

"""class singleton1

(object)

: def __init__

(self)

: pass

# 使用__new__保證每次返回的物件都一樣

def __new__

(cls,

*args,

**kwargs)

:if not hasattr

(cls,

'_instance'):

singleton1._instance =

super()

.__new__

(cls)

return singleton1._instance

if __name__ ==

'__main__'

: a = singleton.

singleton()

b = singleton.

singleton()

""" <__main__.singleton object at 0x7f690c029390

>

140089149789072

<__main__.singleton object at 0x7f690c029390

>

140089149789072

是不是實現類單例1

""" print

(a)print(id

(a))

print

(b)print(id

(b))

c =singleton1()

d =singleton1()

""" <__main__.singleton1 object at 0x7f40809a7908

>

<__main__.singleton1 object at 0x7f40809a7908

>

139915012241672

139915012241672

是不是實現了單例2

""" print

(c)print

(d)print(id

(c))

print(id

(d))

棧的兩種實現方式 python實現

棧是一種後進先出 lifo 的資料結構,在設計演算法時有十分廣泛的應用。對棧的操作是通過將元素壓入棧 放在棧頂 或是將棧頂元素彈出,都是對棧頂元素的操作。若要實現乙個高效的棧,則要考慮到這兩種操作的時間複雜度。有兩種資料結構可以作為實現棧的基礎 順序表和煉表。在順序表尾端插入或刪除元素的時間複雜度與...

兩種方式實現checkBox readonly功能

今天在做開發的時候遇到了這樣乙個問題 有乙個checkbox選項是不能被改變的。但是checkbox又是沒有readonly屬性的,這個時候我就想到了另外乙個屬性disabled,但是disabled的物件是不能提交到後台的,所以這個又被排除掉了。想了想,只能新增事件來搞定了。於是在checkbox...

TabHost兩種實現方式

第一種 繼承tabactivity,從tabactivity中用gettabhost 方法獲取tabhost。只要定義具體tab內容布局就行了.package com.example.testtabhost import android.os.bundle import android.view.l...