class
musicplayer
(object):
iscreate =
false
isinit =
false
def__init__
(self,name,age):if
not musicplayer.isinit:
self.name = name
self.age = age
musicplayer.isinit =
true
pass
def__new__
(cls,
*args,
**kwargs):if
not musicplayer.iscreate:
musicplayer.iscreate =
true
print
('我在這裡面'
) musicplayer.iscreate =
super
(musicplayer,cls)
.__new__(cls)
return musicplayer.iscreate
return musicplayer.iscreate
music = musicplayer(name=
'小紅1號'
,age=11)
print(id
(music)
)print
(music.name)
music1 = musicplayer(name=
'小紅2號'
,age=12)
print(id
(music1)
)print
(music.name)
music2 = musicplayer(name=
'小紅3號'
,age=13)
print(id
(music2)
)print
(music.name)
共享屬性
使用全域性共享屬性# 建立例項時把所有例項的__dict__指向同乙個字典,這樣它們具有相同的屬性和方法.
class
musicplayer
(object):
_owndict =
def__new__
(cls,
*args,
**kwargs)
: own =
super
(musicplayer, cls)
.__new__(cls)
own.__dict__ = own._owndict
own._owndict=
'跑步'
own._owndict[
'run']=
lambda
:print
('{}正在快了的玩耍'
.format
(own.name)
)return own
def__init__
(self, age, name)
: self.age = age
self.name = name
music = musicplayer(age=
12, name=
'小紅'
)print
# 跑步
music.run(
)# 小紅正在快了的玩耍
# music = musicplayer(age=13,name='小紅2號')
# print(music.run()) # 小紅正在快了的玩耍
使用裝飾器實現單例模式
# 使用裝飾器實現單例模式
defsinglecls
(cls,
*args,
**kwargs)
: instace =
defget_instance
(*args,
**kwargs)
:if cls not
in instace:
instace[cls]
= cls(
*args,
**kwargs)
return instace[cls]
return get_instance
@singlecls
class
student
:def
__init__
(self, name, age)
: self.name = name
self.age = age
student = student(name=
'jiang'
,age=25)
print(id
(student)
)#3079491104440
student2 = student(name=
'jiang2'
,age=22)
print(id
(student2)
)#3079491104440
student3 = student(name=
'jiang3'
,age=23)
print(id
(student3)
)#3079491104440
python單例模式繼承 python單例模式
我們可以使用 new 這個特殊方法。該方法可以建立乙個其所在類的子類的物件。更可喜的是,我們的內建 object 基類實現了 new 方法,所以我們只需讓 sing 類繼承 object 類,就可以利用 object 的 new 方法來建立 sing 物件了。classsing object def...
單例模式 python
單例模式 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。實現 某個類只有乙個例項 途徑 1 讓乙個全域性變數使得乙個物件被訪問,但是它不能防止外部例項化多個物件。2 讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立。即單例模式。多執行緒時的單例模式 加鎖 雙重鎖定。餓漢式...
python單例模式
new 在 init 之前被呼叫,用於生成例項物件。利用這個方法和類的屬性的特點可以實現設計模式的單例模式。單例模式是指建立唯一物件,單例模式設計的類只能例項 例項化1個物件。class singleton object instance none def init self pass def ne...