一、__new__()
"""
解釋:
此方法是用來生成類的實例的,它是類里面第一個執行的函數
它至少要有一個參數 通常命名為cls,cls表示需要實例化的類,此參數在實例化時由Python解析器自動提供。
new()方法是在類准備將自身實例化時調用。
new()方法始終都是類的靜態方法,即使沒有被加上靜態方法裝飾器
此函數不返回值或者失敗 則 init不會執行
作用:
用在構造方法init()建造實例之前
在Python 中存在於類里面的構造方法init()負責將類的實例化,而在init()調用之前,new()決定是否要使用該init()方法,因為new()可以調用其他類的構造方法或者直接返回別的對象來作為本類 的實例。
"""
class New():
def __new__(cls, *args, **kv):
print(args, kv)
if not hasattr(cls, '_inst'):
cls._inst = super(New, cls).__new__(cls)
return cls._inst
# return object.__new__(cls)
a = New('new', jxk=12)
二、__init__()
"""
解釋:
在創建一個對象時 默認自動調用
作用:
始化函數,用來完成一些默認的設定
"""
class Init():
def __init__(self, name):
print(self, name)
a = Init('new')
三、__call__()
"""
解釋:
在Python中,函數其實是一個對象:因為函數可以被調用,所以函數被稱為可調用對象
一個類實例也可以變成一個可調用對象,只需要實現一個特殊方法__call__()。
作用:
可以把實例對象用類似函數的形式表示,進一步模糊了函數和對象之間的概念
"""
class Call(object):
def test(self):
print(1)
def __init__(self):
print("我是構造函數! ")
def __call__(self):
print("當把本類實例化並作為函數調用時 自動調用本方法")
c = Call()
c() #調用
四、__str__()
"""
解釋:
當實例化的類對象 被str() 函數調用時 自動觸發此方法
作用:
"""
class Str_(object):
def __str__(self):
print('你調用了str 方法!')
return '返回值必須為字符串'
s = Str_()
str( s )
參考資料: https://blog.csdn.net/Ka_Ka314/article/details/80402143

