new 和 init 是Python中两个特殊的方法,其中 new 方法比较难理解,也比较少用到。这里我们详细讲解一下 new 方法的作用和用法。
new 方法是Python中一个比较特殊的方法,它是一个类的构造器,用于创建类的实例。
new 方法有以下两个特点:
在实例化类时, new 方法会在 init 方法之前被调用。 new 方法是类方法,它需要传递一个cls参数,这个参数表示的是要实例化的类。Python new 方法的定义
new 方法的定义形式为:
class MyClass: def __new__(cls, *args, **kwargs): # do something return super().__new__(cls, *args, **kwargs)
其中,cls表示当前类,args和kwargs分别表示传递给 new 方法的 位置参数 和 关键字参数 。 new 方法需要返回一个新的实例对象,这个实例对象会被传递给 init 方法。
在 new 方法中,我们可以对实例对象进行一些特殊的操作,比如修改实例对象的类型、返回缓存的实例对象等等。
常见的用法包括:
Python new 方法修改实例对象的类型
class MyInt(int): def __new__(cls, value): return super().__new__(cls, abs(value))
上述代码中,我们定义了一个名为MyInt的类,继承自int类。在 new 方法中,我们对实例对象的值进行了取绝对值的操作,从而改变了实例对象的类型。
Python技术站热门推荐:
PDF电子发票识别软件,一键识别电子发票并导入到Excel中!
10大顶级数据挖掘软件!
人工智能的十大作用!
Python new 方法返回缓存的实例对象
class Singleton: _instances = {} def __new__(cls): if cls not in cls._instances: cls._instances[cls] = super().__new__(cls) return cls._instances[cls]
上述代码中,我们定义了一个名为Singleton的类,该类保证在运行时只有一个实例对象存在。在 new 方法中,我们使用一个字典_instances来保存已经创建的实例对象,如果字典中已经存在该类的实例对象,则直接返回该实例对象,否则创建一个新的实例对象并保存到字典中。
需要注意的是,如果我们重写了 new 方法,则必须返回一个实例对象,否则会抛出TypeError异常。
class MyClass: def __new__(cls): pass MyClass() # TypeError: __new__() should return a new instance of type, not 'NoneType'
总的来说, new 方法是一个比较底层的方法,它负责创建实例对象并返回给 init 方法进行初始化。在实际开发中,我们很少需要重写 new 方法,除非我们需要对实例对象进行一些特殊的操作。
查看更多关于Python __new__()方法的定义与作用的详细内容...