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__方法

python中的__new__方法的使用 一丶object类中对__new__方法的定义 class object:   @staticmethod # known case of __ne...
  • LL83477
  • LL83477
  • 2017年07月31日 10:24
  • 494

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

Python中的__new__()方法的使用实例
  • xpresslink
  • xpresslink
  • 2017年08月18日 23:00
  • 129

c++中new和delete的使用方法

对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内...
  • HERO_CJN
  • HERO_CJN
  • 2017年10月09日 21:13
  • 125

Python中的__new__、__init__、__call__三个特殊方法

new: 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self) init : 对象的初始化, 是一个实例方法,第一个参数是self。 cal...
  • HuangZhang_123
  • HuangZhang_123
  • 2017年03月31日 15:05
  • 830

python魔法方法——(__new__)

python在实例化一个对象的时候会调用__init__方法,但是在调用__init__方法之前会调用__new__方法, __new__方法是python类的构造方法,我们可以通过下面的代码创建将...
  • sorrylike89
  • sorrylike89
  • 2017年05月21日 15:10
  • 162

关于python中的__new__方法

python中的__new__方法的使用途径
  • kellyseeme
  • kellyseeme
  • 2016年04月25日 00:07
  • 1391

C++中运算符New的三种使用方式

转自:http://badboywang.iteye.com/blog/446350 1. plain new 普通new void*operator new(std::size_t)throw(...
  • shandianling
  • shandianling
  • 2012年09月21日 20:31
  • 5375

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

new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决...
  • Four_Infinite
  • Four_Infinite
  • 2016年10月12日 17:35
  • 5599

python中__init__()方法和__new__()方法的区别

下面先通过一段代码看看这两个方法的调用顺序:#!/usr/bin/env pythonclass A(object): def __init__(self,*args,**kwargs): ...
  • Four_Infinite
  • Four_Infinite
  • 2016年10月13日 14:19
  • 3204

python中__new__和__init__的区别

转载自http://my.oschina.net/kinegratii/blog/334968 __new__和__init__的区别 __new__是Python面向对象语言中一个很少用的函...
  • taozuihen17
  • taozuihen17
  • 2014年10月21日 18:17
  • 2507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python中的__new__()方法的使用实例
举报原因:
原因补充:

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