python基礎常用的魔法函式

2021-09-27 03:36:46 字數 2396 閱讀 2005

類中的初始化函式,可以顯式顯示即子呼叫類的時候以進行了函式的初始化。

通過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函式呼叫的,一般都是返回乙個值,這個值是以字串...