Python3 --- 魔術方法
阿新 • • 發佈:2018-12-31
1.1、__init__(self):用於初始化
class Cat:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return self.name + str(self.age) + "歲"
cat1 = Cat("湯姆貓", 1)
cat2 = Cat("加菲貓", 2)
print(cat1)
print(cat2)
1.2、__str__(self):相當於Java的重寫的toString方法
class Cat: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return self.name + str(self.age) + "歲" cat1 = Cat("湯姆貓", 1) cat2 = Cat("加菲貓", 2) print(cat1) print(cat2)
1.3、__del__(self):相當於Java中物件銷燬時的回撥函式
class Cat:
def __init__(self,name,age):
self.name = name
self.age = age
def __del__(self):
print("物件已銷燬")
cat1 = Cat("湯姆貓", 1)
cat3 = cat1
del cat1
print("="*20)
cat2 = Cat("加菲貓", 2)
print("="*20)
(1)通過上面的程式碼可以看出,當所有物件的指向都del時,才會執行__del__(self)(2)當程式執行到最後一步完成後,程式會自行銷燬已經不再使用的物件,此時會呼叫__del__(self)
1.4、__mro__():繼承下方法搜尋呼叫的優先順序
(1)根據上面的程式碼可以看出C繼承A和B,A和B繼承Base,Base繼承objectclass Base(object): def test(self): print() class A(Base): def test(self): print("------------A") class B(Base): def test(self): print("------------B") class C(A,B): pass #def test(self): # print("------------C") c = C() c.test() print(C.__mro__)
(2)__mro__是通過C3演算法來確定的方法呼叫的優先順序
1.5、__new__():object的__new__(cls)是建立物件的方法,這裡的__new__(cls)只是重寫了object的方法,所以物件沒有建立,如果需要建立,則需要呼叫object.__new__(cls)方法(如下注釋部分)
class Test(object):
def __init__(self):
print("----init方法----")
def __del__(self):
print("----del方法----")
def __str__(self):
print("----str方法----")
def __new__(cls):
print("----new方法----")
print(id(cls))
#return object.__new__(cls)
print(id(Test))
test = Test()