Pythonの中の_new__方法
1376 ワード
__new__Pythonはオブジェクト向け言語ではあまり使われていない関数で、initという関数が多く使われています.
公式文書によると:
つまり、_new__で_init__前に呼び出されて、_new__の戻り値(インスタンス)が__に渡されます.init__メソッドの最初のパラメータ、そして_init__このインスタンスにパラメータを設定します.
class Book(object):
def __new__(cls, title):
print '__new__'
return super(Book, cls).__new__(cls)
def __init__(self, title):
print '__init__'
super(Book, self).__init__(self)
self.title = title
b = Book('The Django Book')
print(b.title)
上記の結果:
__new__
__init__
The Django Book
で_new__一例を実現するために
実際、私たちが理解するとnew__方法の後、設計モードの単一のモード(singleton)を実現するなど、他の面白いことをするためにも利用できます.クラスがインスタンス化されるたびに生成されるプロセスは__を通過するためです.new__制御するので、リロード_new__方法は,単一例モードを簡単に実現できる.
1 2 3 4 5 6 7 8 9 10 11 12 13
class Singleton(object): def __new__(cls):重要なのは、インスタンス化するたびに、同じinstanceオブジェクトif not hasattr(cls,'instance'):clsだけを返すことです.instance = super(Singleton, cls).__new__(cls) return cls.instance obj1 = Singleton() obj2 = Singleton() obj1.attr1 = 'value1' print obj1.attr1, obj2.attr1 print obj1 is obj2
出力結果:
1 2
value1 value1 True