上**!
class a:def __new__(cls, *args, **kwargs):
obj = super().__new__(cls)
print("__new__ ", obj) # <__main__.a object at 0x00000000021d76a0>
return obj
def __init__(self, name, age):
print("__init__ ", self) # <__main__.a object at 0x00000000021d76a0>
self.name = name
self.age = age
a = a('sath', 22)
print(a) # <__main__.a object at 0x00000000021d76a0>
# 可以看出三次列印都是同乙個記憶體位址
# 執行的順序為: __new__ >>>>> __init__ >>>>> a
# 乙個完整的例項化物件過程:
# 1. 當執行到類名加括號時, 首先執行"__new__"開闢一塊記憶體空間, 並且攜帶了你要給物件封裝的屬性# 2. 將開闢的空間和要封裝的物件屬性return給"__init__"
# 3. "__init__" 初始化這一塊物件的記憶體空間, 將屬性封裝進這個記憶體空間中
# 4. 物件空間初始化完成後, 將這個空間返回給呼叫者, 得到乙個型別為"a"的物件"a"
特殊的類方法
hasattr self,item 點號攔截運算,注 這是乙個繫結物件方法 在乙個類中,如果類裡定義了該方法 大多數內建類是沒有的 則這個類生成的物件加點呼叫屬性或方法時,如果呼叫的名字不存在,不會報錯,會執行 hasattr 這個方法。class person object def init se...
PYTHON類的特殊方法
例項1 python view plain copy coding utf 8 class firstdemo object 這裡是乙個doc a 10 類屬性 def demo self 第乙個方法 pass def demo2 self 第二個方法 pass print firstdemo.di...
Python類的特殊方法
doc描述類的資訊 class foo object 單引號和雙引號都可以 這裡描述類的資訊 def func self passprint foo.doc 這裡描述類的資訊 call物件後面加括號,觸發執行 class foo object defcall self,args,kwargs pri...