從我所瞭解的關於Python面向對象的編程中,如果一個類已經定義了__call__
方法,如果我們像使用函數調用一樣使用類的實例,就會調用該方法。例如:__call__類型的方法
class Employee:
def __init__(self,name,sal):
self.name = name
self.salary = sal
def __call__(self,value):
return self.salary * value
e = Employee("Subhayan",20000)
print (e(10))
因此,__call__
方法將對象實例作爲第一個參數。
我只是想了解Python中的元類,我讀到type
是所有用戶定義的類的默認元類。
如果我定義Python中的基本定製元類:
class Meta(type):
def __new__(meta, classname, supers, classdict):
# Run by inherited type.__call__
return type.__new__(meta, classname, supers, classdict)
現在按照書中給出的文檔的元類__new__
方法將由從類型繼承了__call__
方法運行。
現在我的問題是使用任何類的__call__
方法,我們必須擁有該類的對象,然後將其作爲函數調用。
這裏我們沒有任何類型的對象使用它的__call__
函數。
有人可以請我解釋一下類型類的__call__
函數是如何進入圖片的?
這裏有一個問題。在Singleton __call__函數內部,cls參數將具有MyClass的值。 _instances屬於Singleton類。那麼MyClass如何擁有_instances字典? –
因爲'MyClass'是'Singleton'的一個實例。 – yorodm
Subhayan:...和所有'Singleton'實例共享相同的'_instances'字典,因爲它是一個類,_not_不是實例,屬性。 – martineau