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__
实现单例模式
网友评论