18
ทำไม __init __ () ถูกเรียกหลังจาก __new __ () เสมอ?
ฉันแค่พยายามที่จะปรับปรุงการหนึ่งในชั้นเรียนของฉันและได้แนะนำฟังก์ชันการทำงานบางอย่างในรูปแบบเดียวกับรูปแบบการออกแบบฟลายเวท แต่ฉันบิตสับสนว่าทำไมถึงอยู่เสมอเรียกว่าหลังจาก__init__ __new__ฉันไม่ได้คาดหวังสิ่งนี้ ทุกคนสามารถบอกฉันได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นและฉันจะใช้ฟังก์ชันนี้ได้อย่างไร? (นอกเหนือจากการนำการติดตั้งไปใช้__new__ซึ่งรู้สึกแฮ็คค่อนข้างมาก) นี่คือตัวอย่าง: class A(object): _dict = dict() def __new__(cls): if 'key' in A._dict: print "EXISTS" return A._dict['key'] else: print "NEW" return super(A, cls).__new__(cls) def __init__(self): print "INIT" A._dict['key'] = self print "" a1 = A() a2 = A() a3 = A() ขาออก: NEW INIT EXISTS INIT …