Python3 --- 魔术方法

 

1.1、__init__(self):用于初始化

  1. class Cat:  
  2.     def __init__(self,name,age):  
  3.         self.name = name  
  4.         self.age = age  
  5.   
  6.     def __str__(self):  
  7.         return self.name + str(self.age) + "岁"  
  8.   
  9. cat1 = Cat("汤姆猫", 1)  
  10. cat2 = Cat("加菲猫", 2)  
  11.   
  12. print(cat1)  
  13. print(cat2)  

1.2、__str__(self):相当于Java的重写的toString方法

  1. class Cat:  
  2.     def __init__(self,name,age):  
  3.         self.name = name  
  4.         self.age = age  
  5.   
  6.     def __str__(self):  
  7.         return self.name + str(self.age) + "岁"  
  8.   
  9. cat1 = Cat("汤姆猫", 1)  
  10. cat2 = Cat("加菲猫", 2)  
  11.   
  12. print(cat1)  
  13. print(cat2)  

1.3、__del__(self):相当于Java中对象销毁时的回调函数

  1. class Cat:  
  2.     def __init__(self,name,age):  
  3.         self.name = name  
  4.         self.age = age  
  5.   
  6.     def __del__(self):  
  7.         print("对象已销毁")  
  8.   
  9. cat1 = Cat("汤姆猫", 1)  
  10. cat3 = cat1  
  11. del cat1  
  12.   
  13. print("="*20)  
  14. cat2 = Cat("加菲猫", 2)  
  15.   
  16. print("="*20)  
(1)通过上面的代码可以看出,当所有对象的指向都del时,才会执行__del__(self)
(2)当程序执行到最后一步完成后,程序会自行销毁已经不再使用的对象,此时会调用__del__(self)

1.4、__mro__():继承下方法搜索调用的优先级

  1. class Base(object):  
  2.     def test(self):  
  3.         print()  
  4.   
  5. class A(Base):  
  6.     def test(self):  
  7.         print("------------A")  
  8.   
  9. class B(Base):  
  10.     def test(self):  
  11.         print("------------B")  
  12.   
  13. class C(A,B):  
  14.     pass  
  15.     #def test(self):  
  16.     #    print("------------C")  
  17.   
  18. c = C()  
  19. c.test()  
  20. print(C.__mro__)  
(1)根据上面的代码可以看出C继承A和B,A和B继承Base,Base继承object

(2)__mro__是通过C3算法来确定的方法调用的优先级

1.5、__new__():object的__new__(cls)是创建对象的方法,这里的__new__(cls)只是重写了object的方法,所以对象没有创建,如果需要创建,则需要调用object.__new__(cls)方法(如下注释部分)

 
  1. class Test(object):  
  2.     def __init__(self):  
  3.         print("----init方法----")  
  4.   
  5.     def __del__(self):  
  6.         print("----del方法----")  
  7.   
  8.     def __str__(self):  
  9.         print("----str方法----")  
  10.   
  11.     def __new__(cls):  
  12.         print("----new方法----")  
  13.         print(id(cls))  
  14.         #return object.__new__(cls)  
  15.   
  16. print(id(Test))  
  17.   
  18. test = Test()  

版权声明:转载。 https://blog.csdn.net/Ka_Ka314/article/details/80402143
posted @ 2018-06-08 14:55  Awakenedy  阅读(560)  评论(0)    收藏  举报