美文网首页Python高级编程
Python__new__方法和__init__方法的区别

Python__new__方法和__init__方法的区别

作者: 戏之地 | 来源:发表于2016-12-22 14:42 被阅读711次

2017.4.25更新

__init__方法的作用到底是什么

我之前对于init方法的了解是不准确的,init的英语原意是初始化。此方法只能对一个实例进行初始化,不能创建一个实例。

谁创建实例

__new__ 方法。

__new__ 属于object类,故在新式类中,此方法存在于每一个类
__new__ 方法始终都是类的静态方法,即使没有被加上静态方法装饰器。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Person(object):
    def __new__(cls, *args,**kwargs):
        print("__new__ was called")
        return super(Person, cls).__new__(cls,*args,**kwargs)
    def __init__(self, age, name):
        print("__init__ was called ")
        print(self, age, name, sep="|")
        self.age = age
        self.name = name
person = Person(12, "jatrix")

__init__是实例级别的算法,__new是类级别的算法

__new__ 的作用


#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 制作一个只产生正数的类


class PositiveClassByChangingInit(int):
    def __init__(self, num):
        # num 已经是一个实例了,下面的self.num只是其一个属性而已
        self.num = num if num >= 0 else -num


m = PositiveClassByChangingInit(-3)

print(m)  # -3
print("m的属性", m.num)  # m 的属性 3


class PositiveClassByChangingNew(int):
    def __new__(cls, value):
        return super().__new__(cls, abs(value))


n = PositiveClassByChangingNew(-3)
print(n)  # 3

__new__实现单例模式

Python单例模式

相关文章

网友评论

    本文标题:Python__new__方法和__init__方法的区别

    本文链接:https://www.haomeiwen.com/subject/iuwcvttx.html