類的內建方法
阿新 • • 發佈:2018-11-25
isinistance(obj, cls)
檢查obj是否是類cls的物件
class Foo(object): pass obj = Foo() print(isinstance(obj, Foo))
issubclass(sub,super)
檢查sub類是否是super類的派生類
class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar, Foo))
__setitem__,__getitem__,__delitem__
把物件模擬成像字典物件操作一樣的型別
__getitem__ 檢視屬性
class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): # item = "name" 通過字串訪問屬性 # print("getitem...") # print(item) return self.__dict__.get(item) obj = Foo("alex") # print(obj.__dict__) # obj.屬性 obj["name"] #按照這種形式取值
__setitem__ 設定屬性
class Foo: def __init__(self, name): self.name = name def __setitem__(self, key, value): # 設定值 # print("setitem...") # print(key, value) self.__dict__[key]=value obj = Foo("alex") # print(obj.__dict__) # obj.sex = "male" # 以前設值(賦值) obj["sex"] = "male" print(obj.__dict__) print(obj.sex)
__delitem__ 刪除屬性
class Foo: def __init__(self, name): self.name = name def __delitem__(self, key): # 刪除屬性 # print("delitem..") # print(key) # self.__dict__.pop(key) del self.__dict__[key] obj = Foo("alex") # print(obj.__dict__) print(obj.__dict__) # del obj.name del obj["name"] print(obj.__dict__)
__str__,__repr,__format__
d = {"name": "egon"} # 本質上是dict類的例項 # d = dict({"name": "egon"}) # print(isinstance(d, dict)) print(d) #{'name': 'egon'} class Foo: pass obj = Foo() print(obj) #<__main__.Foo object at 0x000001E4EF704B00>
本質是d和obj都是類的例項,但是列印的結果不一樣
__str__方法
在列印時觸發,把返回值以字串的形式,作為列印的內容
# __str__方法(一定要返回字串型別)(列印物件的時候會觸發該方法的執行) class People: def __init__(self, name, age): self.name = name self.age = age def __str__(self): # 在列印時觸發,把返回值以字串的形式,作為列印的內容 # print("----->str") return "<name:%s,age:%s>" % (self.name, self.age) obj = People("alex", 20) print(obj) # print(obj.__str__())
__del__ 回收資源
在物件刪除的時候會自動先觸發該功能
# __del__ 回收資源(繫結給物件的) 在物件刪除的時候會自動先觸發該功能 # f = open("a.text") # 在應用程式中拿到的是單純的f,在作業系統中實際上是打開了一個檔案 # f.read() # 應用程式對作業系統的呼叫 # f.close() # 回收作業系統資源 f 還是存在 class Open: def __init__(self,filename): print("open file.....") self.filename = filename def __del__(self): print("回收作業系統資源:self.close()") f = Open("start.py") del f # f.__del__() 手動 print("-------main-----") # f.__del__() 自動 程式結束python會自動回收掉f(del f),遺留下了作業系統資源。__del__回收作業系統資源