類物件以及類例項的建立過程

2022-08-17 00:15:11 字數 2350 閱讀 3340

# 類物件以及類例項的建立過程

class animalmeta(type):

def __new__(cls, *args, **kwargs):

print("*****==>animalmeta__new__%s"%cls)

return type.__new__(cls,*args,**kwargs)

def __init__(self,*args,**kwargs):

print("*****==>animalmeta__init__%s"%self)

def __call__(self, *args, **kwargs):

print("*****==>animalmeta__call__%s" % self)

return type.__call__(self,*args,**kwargs)

class animal(metaclass=animalmeta):

def __new__(cls, *args, **kwargs):

print("*****==>animal__new__%s" % cls)

return object.__new__(cls, *args, **kwargs)

def __init__(self):

print("*****==>animal__init__%s" % self)

def __call__(self, *args, **kwargs):

print("*****==>animal__call__%s" % self)

class personmeat(type):

def __new__(cls, *args, **kwargs):

# 用於實現類物件的建立,根據返回值的不同建立不同的類物件,也就是說類物件是由返回值來決定的

# 不過這裡必須是type的子類物件

print("*****==>personmeat__new__%s"%cls)

return type.__new__(cls,*args,**kwargs)

# return type.__new__(animalmeta,*args,**kwargs)#通過其他原類的子類來建立類物件

# return animalmeta(*args,**kwargs)

def __init__(self,*args,**kwargs):

# 用於實現給類物件進行屬性以及方法的賦值

print("*****==>personmeat__init__%s"%self)

def __call__(self, *args, **kwargs):

# 實現類例項的建立,self是類物件,先呼叫類物件的__new__方法,根據__new__物件的返回值

# 實現對不同類例項的__init__方法的呼叫以完成類例項的屬性的賦值

print("*****==>personmeat__call__%s" % self)

return type.__call__(self,*args,**kwargs)

# return type.__call__(animal,*args,**kwargs)

# return animal(*args,**kwargs)

class persion(metaclass=personmeat):

def __new__(cls, *args, **kwargs):

# 實現類例項的建立

print("*****==>persion__new__%s" % cls)

return object.__new__(cls,*args,**kwargs)

# return object.__new__(animal,*args,**kwargs)

# return animal()

def __init__(self):

# 實現類例項的屬性的賦值

print("*****==>persion__init__%s" % self)

def __call__(self, *args, **kwargs):

print("*****==>persion__call__%s" % self)

'''建立類例項過程:

1、先通過類的原類的__new__方法來建立類物件

2、在通過類的原類的__init__方法來實現對類物件的屬性以及方法的賦值

3、通過呼叫類的原類的__call__方法來實現對類物件的__new__方法以及__init__方法的排程

4、呼叫類物件的__new__方法實現類的例項

5、呼叫類物件的__init__方法實現類例項的屬性以及方法的賦值

'''# p = persion()

類載入過程 物件的建立過程

1 jvm發現要使用乙個類,首先要到方法區中找 如果找到了,就直接使用,如果沒有找到,才會去找這個類的class檔案,然後載入 在找class檔案時,是根據classpath配置的位址去找 如果沒有配置,就在當前目錄找 2 在硬碟上找到class檔案後,就開始載入這個class,根據書寫順序,先後將...

C 根據類名建立類的例項物件

因為我使用這個方法的類都是和abstractscenepagedto處於乙個命名空間以及程式集下的,所以獲取命名空間和程式集的時候,直接使用abstractscenepagedto這個類進行獲取,這樣更準確一些,也不怕專案遷移改名。1 private t createactivityscenepag...

類,物件,例項

之前一直將物件和例項區分不清楚,最近思考了下,整理如下 類 例項化 物件 例項是相對於某乙個具體類的概念,a物件是b類的例項。類是物件的集合 抽象 類例項化為物件,因此所謂的例項是相對類而言的,並不能說tom是例項,而是tom是student類的例項。但我們可以說tom是乙個物件。函式是functi...