最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python中魔术方法是什么

    正文概述    2020-02-20   285

    Python中魔术方法是什么

    1、什么是魔术方法

    魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。它们经常是两个下划线包围来命名的(比如 __init__,__lt__),Python的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要!

    2、__init__(self[, ...]),__new__(cls[, ...]),__del__(self)

    __init__ 构造器,当一个实例被创建的时候初始化的方法。但是它并不是实例化调用的第一个方法,__new__才是实例化对象调用的第一个方法,它只取下 cls参数,并把其他参数传给 __init__。 __new__很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。

    __new__ 使用时注意以下四点:

    1. __new__ 是在一个对象实例化的时候所调用的第一个方法
    2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法
    3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的
    实例,如果 __new__ 没有返回实例对象,则 __init__ 不会被调用
    4. __new__ 主要是用于继承一个不可变的类型比如一个 tuple 或者 string
    5. __new__ return的是一个构建的实例

    __new__实现单例模式:

    class Person(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
     
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls,'instance'):
                cls.instance = super(Person,cls).__new__(cls)
            return cls.instance
    a = Person('p1',20)
    b = Person('p2',21)
    print(a == b)
    #这里的打印结果是True,可见a,和b都是同一个实例
    #单例作用:
    #第一、控制资源的使用,通过线程同步来控制资源的并发访问;
    #第二、控制实例产生的数量,达到节约资源的目的。
    #第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不##相关的两个线程或者进程之间实现通信。
    #比如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。

    更多学习内容,请点击Python学习网。


    起源地下载网 » Python中魔术方法是什么

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元