码迷,mamicode.com
首页 > 编程语言 > 详细

Python 面向对象 特殊方法

时间:2019-02-26 19:35:18      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:play   bsp   hid   高级语言   返回   华为   show   模式   rgs   

Python 的特殊方法,两边带双下划线的方法。

比如:__init__(self, ...)、__del__(self)

1、__init__(self,...) : 构造方法

  __init__(self, ...)  构造方法,这个方法在创建对象时,自动触发执行。实例化类格式: 类名() 

技术图片
class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
        print("执行 __init__ 方法")


p = Phone(小米, 2018)   # 自动执行类中的 __init__ 方法

结果:
执行 __init__ 方法
View Code

2、__del__(self):析构方法

  析构方法,当对象在内存中被释放时,或者手动调用del方法,自动触发执行。

  注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,
    因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

技术图片
>>> class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
        print("执行 __init__ 方法")

    def __del__(self):
        print("执行 __del__ 方法")

        
>>> p = Phone(小米, 2018)   # 自动执行类中的 __init__ 方法
执行 __init__ 方法
>>> del p
执行 __del__ 方法
>>> 
View Code

3、__new__(): 定义如何创建对象

  类名() 创建对象时,在自动执行 __init__()方法前,会先执行 object.__new__方法,在内存中开辟对象空间并返回

技术图片
>>> class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
        print("执行 __init__ 方法")

    def __new__(cls, *args, **kwargs):
        print("执行 __new__ 方法")
        return object.__new__(cls)

    
>>> p = Phone(小米, 2018)   # 自动执行类中的 __init__ 方法
执行 __new__ 方法
执行 __init__ 方法
>>>
1 类名() 执行object.__new__方法,在内存中开辟对象空间并返回;
2 自动执行__init__方法,将对象空间创给self;
3 在__init__给对象封装属性。
View Code
技术图片
# 单例模式: 一个类只能实例化一个对象
class Phone:
    __instance = None

    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
        return cls.__instance


p1 = Phone(小米, 2018)
p2 = Phone(华为, 2017)
p3 = Phone(魅族, 2016)

print(p1)
print(p2)
print(p3)

结果:
<__main__.Phone object at 0x000001C5B2286160>
<__main__.Phone object at 0x000001C5B2286160>
<__main__.Phone object at 0x000001C5B2286160>
View Code

 4、__module__ 和 __class__

  __module__ : 表示当前操作的对象在那个模块,本模块 : __main__

  __class__     : 表示当前操作的对象的类是什么

技术图片
>>> class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

        
>>> p = Phone(小米, 2018)
>>> p.__module__
__main__
>>> p.__class__
<class __main__.Phone>
>>> 
View Code

5、__call__

  __call__:对象后面加括号,触发执行。

技术图片
>>> class Phone:
    def __init__(self):
        pass
    def __call__(self, *args, **kwargs):
        print(执行 __call__ 方法)

        
>>> p = Phone()
>>> p()
执行 __call__ 方法
>>> 
View Code

 

Python 面向对象 特殊方法

标签:play   bsp   hid   高级语言   返回   华为   show   模式   rgs   

原文地址:https://www.cnblogs.com/51try-again/p/10403577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!