舉例代碼:
class A:
def init(self):
print(self)
print(“這是構造方法”)
def new(cls, *args, **kwargs):
print(id(cls))
print(“這是new 方法,相當於__init__只是最後的那盤菜,而__new__纔是得到食材”)
ret = object.new(cls)
print(ret)
return ret
@classmethod
def FA(cls):
print(“這是類方法,默認是類對象調用方法,參數最好使用默認的cls”)
@staticmethod
def FB(lalala):
print(“這是靜態方法,不像普通方法,默認對象調用,(默認self作爲函數參數00),這個方法得自己寫”)
print(id(A))
print(A())
print("#"*60)
A.FA()
a = A()
#A.FB() a.FB() #報錯,靜態方法,不像普通方法,默認對象調用
A.FB(“aaaaa”)
運行結果:
2193562339896
2193562339896
這是new 方法,相當於__init__只是最後的那盤菜,而__new__纔是得到食材
<main.A object at 0x000001FEBC74D5C0>
<main.A object at 0x000001FEBC74D5C0>
這是構造方法
<main.A object at 0x000001FEBC74D5C0>
############################################################
這是類方法,默認是類對象調用方法,參數最好使用默認的cls
2193562339896
這是new 方法,相當於__init__只是最後的那盤菜,而__new__纔是得到食材
<main.A object at 0x000001FEBC74D5C0>
<main.A object at 0x000001FEBC74D5C0>
這是構造方法
這是靜態方法,不像普通方法,默認對象調用,(默認self作爲函數參數00),這個方法得自己寫
Process finished with exit code 0
總結:
0、靜態方法,不像普通方法,默認對象調用,(默認self作爲函數參數00),這個方法調用參數得自己寫
1、 new 至少要有一個參數cls,代表要實例化的類,此參數在實例化時由Python解釋器自動 提供
2、 new 必須要有返回值,返回實例化出來的實例,這點在自己實現 new 時要特別注 意,可以return父類 new 出來的實例,或者直接是object的 new 出來的實例
3、 init 有一個參數self,就是這個 new 返回的實例, init 在 new 的基礎上 可以完成一些其它初始化的動作, init 不需要返回值
我們可以將類比作製造商, new 方法就是前期的原材料購買環節, init 方法就是在 有原材料的基礎上,加工,初始化商品環節