zoukankan      html  css  js  c++  java
  • python __new__ 用法

    与__init__一样,每当实例化类时MyClass(*args, **kwargs) ,__new__ 都会默认自动执行MyClass.__new__(*args, **kwargs),如果想改变默认__new__行为,可以对它自定义

    看一个英寸转换为米例子:

    1 class inch(float):
    2     def __new__(cls, arg=0.0):
    3         return float.__new__(cls, arg * 0.0254)

    改变了__new__的自定义实例化类

    inch继承自float

    如果同时存在__new__ ,__init__则__new__比__init__先运行,__new__将返回一个对象

    a = inch(12)

    print isinstance(a, float) 这里将会是True,可以认为inch实例化的对象类型是float,是可以直接拿来做加减乘除等操作

    print a + 0.1 #进行基本的浮点运算。

    再来个单例的,通过重载__new__实现单例:

    class Singleton(object):
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls, '_instance'):
                cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
            return cls._instance
  • 相关阅读:
    Docker
    Docker
    Docker
    Docker
    Docker
    Docker
    pandas——向已经存在的excel数据写入data
    python——利用UI选择路径
    python——装饰器的使用
    python——生成器(协程)gevent多任务
  • 原文地址:https://www.cnblogs.com/bjdxy/p/2801649.html
Copyright © 2011-2022 走看看