python 物件導向單例元類

2021-10-12 01:16:45 字數 1725 閱讀 9879

通過類方法來實現單例,這樣我在執行乙個函式中建立物件,但是呼叫多次只是乙個例項。

class

person()

: @classmethod

defsingle_instancee

(cls,

*args,

**kwargs):if

notgetattr

(person,

'instance'):

cls.instance = person(

*args,

**kwargs)

else

:return cls.instance

def

(cls)

: instance =

definner

(*args,

**kwargs)

:if cls not

in instance:

instance[cls]

= cls(

*args,

**kwargs)

return instance[cls]

return inner

class

singleton

(object):

def__init__

(self,name,age)

: self.name = name

self.age = age

obj1 = singleton(

'wy',22

)obj2 = singleton(

'xx',22

)print

(obj1)

print

(obj2)

python一切皆物件,類也是物件

類是由type建立的type(類名,(object),*args)。

class_dic =

class_body =

"""def __init__(self,name,pwd):

self.name = name

self.pwd = pwd

"""exec

(class_body,

,class_dic)

people =

type

('people',(

object

)},class_body)

物件加括號就是呼叫的__call__方法,就是類中的__call__方法

如何產生類

__new__ 產生乙個空物件

class

mymetaclass

(type):

def__call__

(self,

*args,

**kwargs)

obj = slef.__new__(self)

#空物件

self.__init__(obj,

*args,

**kwargs)

return obj

class

people

(metaclass=mymetaclass)

:def

__new__

(cls,

*args,

**kwargs)

:return

object

.__new__(cls)

物件導向9 元類之單例模式

1 自定義元類控制類的例項化行為 1.1 儲備知識之 call 方法 先看下定義一類,有和沒有 call 方法是,呼叫該類例項化的物件時的情況,如下 謹記 一定是在呼叫物件時會自動觸發執行 call 方法 既然有 call 方法就可以被呼叫,那麼類也就是元類例項化出來的物件,是否說明元類也存在 ca...

python元類單例 元類實現單例模式

python中的類也是物件。元類就是用來建立這些類 物件 的,元類就是類的類,你可以這樣理解為 myclass metaclass 元類建立 myobject myclass 類建立例項 實際上myclass就是通過type 來創建立出myclass類,它是type 類的乙個例項 同時myclass...

Python 物件導向 單例

單例設計模式 重寫 new 方法 的 非常固定!如果不返回任何結果,定義類屬性記錄單例物件引用 instance none def new cls,args,kwargs 1.判斷類屬性是否已經被賦值 if cls.instance is none cls.instance super new cl...