類中的初始化函式,可以顯式顯示即子呼叫類的時候以進行了函式的初始化。
通過vars函式獲知顯示宣告的屬性,但是隱式的就無法獲知了,
直接列印物件的實現方法,__str__是被print函式呼叫的,一般都是return乙個什麼東西,這個東西應該是以字串的形式表現的。如果不是要用str()函式轉換,我們可以直接print的物件都是實現了__str__這個方法的。
函式返回一定是str型別,當print(test())中test中的__str__函式返回的是非str型別,就會報錯。
class test:
def __init__(self):
self.a=1
self.b=2
def __str__(self):
print(test().__str__())
print(test())
在object類中存在乙個靜態的__new__(cls, *args, **kwargs
)方法,該方法需要傳遞乙個引數cls,cls表示需要例項化的類,此引數在例項化時由python直譯器自動提供,__new__方法必須有返回值,且返回的是被例項化的例項,只有在該例項返回後才會呼叫__init__來進行初始化,初始化所用的例項就是__new__返回的結果,也就可以認為是self。可用於呼叫別的類。
python定義類時,class()與class(object)的區別
在python2中,class(object)定義時,class繼承了object()的屬性;
在python3中,class()預設繼承了object();
class test_obj():
def __init__(self):
print('another obj')
self.a=3
self.b=4
def __str__(self):
return 'hello'
class test():
def __init__(self):
self.a=1
print('---init---')
self.b=2
def __str__(self):
return 'hello'
def __new__(new_obj,*args,**kwargs):
print("create a new obj")
test_obj_new = test_obj()
return test_obj_new
test().a
是先進行了__new__()方法在對例項進行初始化操作。
因此可以這麼描述__new__()和__ini__()的區別,在新式類中__new__()才是真正的例項化方法,為類提供外殼製造出例項框架,然後呼叫該框架內的構造方法__init__()使其豐滿。
__unicode__()方法是在乙個物件上呼叫unicode()時被呼叫的。因為django的資料庫後端會返回unicode字串給model屬性,所以我們通常會給自己的model寫乙個__unicode__()方法。如果定義了__unicode__()方法但是沒有定義__str__()方法,django會自動提供乙個__str__()方法呼叫 __unicode__()方法,然後把結果轉換為utf-8編碼的字串物件,所以在一般情況下,只定義__unicode__()方法,讓 django來處理字串物件的轉換
python3 只保留了__str__()的方法,具體作用基本相同,同是對乙個物件進行美化輸出。
物件通過提供__call__()方法可以模擬函式的行為,如果乙個物件提供了該方法,就可以像函式一樣使用它。定義了該函式
class test():
def __init__(self):
self.a=1
print('---init---')
self.b=2
def __call__(self,x,y):
return x**y
print(test()(4,3))
返回值需為int型別,平常len呼叫後就會呼叫該函式。可定製輸出
repr() 轉化為供直譯器讀取的形式,某物件沒有適於人閱讀的解釋形式的話,str() 會返回與repr(),所以print展示的都是str的格式。
可以設定函式屬性,新增函式屬性的規則。
def test():
def __setarr__(self,x,y):
if y >0:
object.__setarr__(self,x,true)
else:
object.__setarr__(self,x,false)
該函式可以設定特定規則。
只有在沒有找到物件屬性的時候呼叫,
參考資料:
python的魔法函式 python常用的魔法函式
new 與 init new 在例項建立之前被呼叫的,就是建立例項後返回該例項物件,是個靜態方法。init 是當例項物件建立完成後被呼叫的,然後設定物件屬性的一些初始值,通常用在初始化乙個類例項的時候。是乙個例項方法。class foo object def init self print init...
python必背函式 python常用魔法函式
1 init 所有類的超類object,有乙個預設包含pass的 init 實現,這個函式會在物件初始化的時候呼叫,我們可以選擇實現,也可以選擇不實現,一般建議是實現的,不實現物件屬性就不會被初始化,雖然我們仍然可以對其進行賦值,但是它已經成了隱式的了,程式設計時顯示遠比隱式的更好,看下面的小栗子 ...
python的魔法函式
所以還是老老實實的把自己的基本功練好,物件導向玩的爐火純青,其他的不過是稍加訓練,跟賣藝的學幾招也能稱霸一片天。哈哈 牛吹的太過了,還是回到正題,總結分享一下一些稍微不太熟悉的魔法方法。一 str 它表示的是直接列印物件實現的方法,str 是被print函式呼叫的,一般都是返回乙個值,這個值是以字串...