__init__()
這個方法一般用於初始化一個類
但是 當例項化一個類的時候, __init__並不是第一個被呼叫的, 第一個被呼叫的是__new__
#!/usr/bin/env python
# coding:utf-8
class Test(object):
"""
用於初始化類
"""
def __init__(self, a, b):
self.a = a
self.b = b
def res(self):
return (self.a, self.b)
t = Test(100, 200)
print t.res()
"""
(100, 200)
"""
__str__()
這是一個內建方法, 只能返回字串, 並且只能有一個引數self
#!/usr/bin/env python
# coding:utf-8
class Test(object):
"""
用於初始化類
"""
def __init__(self, a, b):
self.a = a
self.b = b
def res(self):
return (self.a, self.b)
def __str__(self):
return '這是一個類'
t = Test(100, 200)
print t.__doc__
print '-----'
print t
"""
用於初始化類
-----
這是一個類
"""
__new__()
- __new__方法是建立類例項的方法, 建立物件時呼叫, 返回當前物件的一個例項
- __init__方法是類例項建立之後呼叫, 對當前物件的例項的一些初始化, 沒有返回值
先看舊式類的例子
class Test:
def __init__(self, age=20):
print '__init__在執行'
self.age = 20
def __new__(cls):
print '__new__在執行'
return super(Test, cls).__new__(cls)
t = Test()
"""
__init__在執行
"""
舊式類沒有__new__()方法
新式類的__new__
#!/usr/bin/env python
# coding:utf-8
class Test(object):
def __init__(self, age):
print '__init__在執行'
self.age = age
def __new__(cls, age):
print '__new__在執行'
return super(Test, cls).__new__(cls, age)
t = Test(20)
"""
__new__在執行
__init__在執行
"""
上例可以看出__new__是在__init__之前執行的
上例的執行邏輯:
- 先執行t = Test(20)
- 首先執行age引數來執行Test類的__new__()方法, 這個__new__方法會返回Test類的一個例項(通常使用)
__call__()
物件通過提供一個__call__(self, *args, *kwargs)方法可以模擬函式的行為, 如果一個物件提供了該方法, 可以向函式一樣去呼叫它
# -*- coding: utf-8 -*-
class Test(object):
def __init__(self):
print 100
def __new__(cls):
print 200
return super(Test, cls).__new__(cls)
def __call__(self, x):
print 300
t = Test()
t(100)
"""
200
100
300
"""