Python中的__new__()方法的使用实例

原创 2017年08月18日 23:00:16

 __new__()是在新式类中新出现的方法,在Python2.7以前的版本在定义类时j都要显示的继承object才能使用。

object将__new__()方法定义为静态方法,并且至少需要传递一个位置参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供。

__new__()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。__new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而__new__()方法是在类准备将自身实例化时调用, __new__方法正是创建这个类实例的方法。


举个实例来说明它的用途,比如说要定义一个Person类,在实例化一个对象时对初始化参数进行检查,如果合法就创建实例,如果不合法就不创建实例返回None


class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __new__(cls, name, age):
        if 0 < age < 150:
            return object.__new__(cls)
            # return super(Person, cls).__new__(cls)
        else:
            return None

    def __str__(self):
        return '{0}({1})'.format(self.__class__.__name__, self.__dict__)

print(Person('Tom', 10))
print(Person('Mike', 200))

Person({'age': 10, 'name': 'Tom'})
None
>>> 

Python 之 __new__() 方法与实例化

__new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构造方法 __init__() 负责将类的实例化,而在 __init__()...

Python 之 __new__() 方法与实例化

Python 之 __new__() 方法与实例化 __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构造方法 __...

python之__new__方法与实例化

__new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构造方法 __init__() 负责将类的实例化,而在 __init__()...

python 7-1 如何派生内置不可变类型(int,str,tuple,float)并修改实例化行为,继承内置tuple并实现__new__

7-1 如何派生内置不可变类型(int,str,tuple,float)并修改实例化行为解决方案: 定义类IntTuple继承内置tuple,并实现new,修改实例化行为比如我们需要做一个定制化的浮...

Python中的 new-style class 及其实例详解

1.1. 5.2 new-style Class 及其实例 前面我提到 python 2.2 中引入了 new-style 对象模型. new-style class 及其实例与 Class...

python中的 new-style class 及其实例详解

1.1. 5.2 new-style Class 及其实例 前面我提到 python 2.2 中引入了 new-style 对象模型. new-style class 及其实例与 Class...

对象实例化-new & getInstance()方法

首先声明一下的是对于抽象类,要想对其实例化,只能用getInstance方法,是不能用new的. 单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必...

《黑马程序员》 静态方法中不能new内部类的实例对象的总结

------- android培训、java培训、期待与您交流! ---------- class Test{ public void main(String[] args){ A test...
  • xfgzss
  • xfgzss
  • 2014年03月29日 11:56
  • 860

静态方法中不能new内部类的实例对象的总结

原文   http://blog.csdn.net/zhizguoz/article/details/22483535 class Test{ public void main(String...
  • a010655
  • a010655
  • 2015年05月21日 20:09
  • 1052

java 用new语句创建(实例化)对象的三种方法的性能对比

Java中最常用的创建对象的方法便是用 new语句 来创建,但是 很多人用不好 却会使性能降低很多  下面请看一个测试例子: package com.test; public class Tes...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python中的__new__()方法的使用实例
举报原因:
原因补充:

(最多只允许输入30个字)