Python3類的特殊方法
阿新 • • 發佈:2019-07-21
常見的特殊方法
__repr__()
物件轉字串方法
__repr__() 方法實現這樣一個功能:當程式設計師直接列印該物件時,系統將會輸出該物件的“自我描述”資訊,用來告訴外界該物件具有的狀態資訊。
class Apple: def __init__(self, color, weight): self.color = color self.weight = weight def __repr__(self): return "Apple [color = " + self.color + ", weight = " + str(self.weight) +"]" a = Apple("紅色", 5.68) print(a) # 輸出 Apple [color = 紅色, weight = 5.68]
__del__()
析構方法
物件被銷燬時自動執行的方法
__dir__()
方法
用於列出該物件內部的所有屬性(包括方法)名,該方法將會返回包含所有屬性(方法)名的序列
__dict__
屬性
用於檢視物件內部儲存的所有屬性名和屬性值組成的字典
__getattr__()、__setarr__()
等方法
當程式操作(包括訪問、設定、刪除)物件的屬性時,Python系統同樣會執行該物件特定的方法
__getattribut__(self, name)
:當程式訪問物件的name
屬性時被自動呼叫__getattr__(self, name)
:當程式訪問物件的name
屬性且該屬性不存在時被自動呼叫__setattr__(self, name)
:當程式對物件的name
屬性賦值時被自動呼叫__delattr__(self, name)
:當程式刪除物件的name
屬性時被自動呼叫
與反射相關的屬性和方法
動態操作屬性
在動態檢查物件是否包含某些屬性(包括方法)相關的函式有如下幾個
hasattr(obj, name)
:檢查obj
物件是否包含名為name
的屬性或方法getattr(obj, name[,default])
:獲取obj
物件中名為name
的屬性的屬性值setattr(obj, name, value)
:將obj
物件的name
屬性設為 ```value``
__call__
屬性
上面的
hasattr()
函式可以判斷指定屬性(或方法)是否存在,但到底是屬性還是方法,則需要進一步判斷它是否可呼叫
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Leo Song
class User:
def __init__(self, name, passwd):
self.name = name
self.passwd = passwd
def validLogin(self):
print("驗證%s的登入" % self.name)
u = User("alex", "abc123")
print(hasattr(u.name, '__call__')) # False
print(hasattr(u.validLogin, '__call_