1. 程式人生 > >類的內建方法

類的內建方法

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__回收作業系統資源