面向对象内置方法
__str__
對于python的數據類型(類型也是類),打印結果是一個值。
而對于自定義類并實例化的對象,打印這個對象,得到的結果是一個內存地址。而那有沒有辦法自定義對象的打印信息呢?在類體中定制 __str__ 函數即可實現這個功能。
__str__ 特性:1. 觸發時執行 2. 一定要有返回值,并且是字符串類型。
__del__
從內存中清除對象有兩種方式:1. del obj 2. 程序執行完后,也會將obj從內存中清除。其實都是悄無聲息地觸發了 對象的綁定方法 __del__ 的執行。我們也可以定制該方法。
class Teacher:def __init__(self,name,major,level):self.name = nameself.major = majorself.level = leveldef __del__(self):print('deleted successfully') # 輸出提示信息t = Teacher('Egon','python',10)'''程序運行完輸出如下信息: deleted successfully '''__del__ 應用場景:
對于有連接的對象,比如套接字對象,數據庫連接對象,這些對象與遠端建立起連接后(通過TCP/UDP等協議),連接是由操作系統維持的。在我們刪除了對象或程序執行完畢,__del__ 會被觸發清除該對象。但是由該對象產生的連接關閉,還占用著資源。通過定制__del__, 可以來關閉連接或文件,形式如下:
__getitem__、__setitem__、__delitem__
python的很多數據類型,比如列表,字典,都支持通過obj[ ]方式操作對象。我們也可以通過python提供的內置方法,為自定義類實現這種操作。
class Teacher:def __init__(self,name,major,level):self.name = nameself.major = majorself.level = leveldef __getitem__(self,val):return self.__dict__[val]def __setitem__(self,key, val):self.__dict__[key] = valdef __delitem__(self, key):self.__dict__.pop(key)t = Teacher('Egon','python',10) # 這樣,以下兩種方式都能完成同樣的效果。 print(t.name) print(t['name']) # 把t和'name'傳給 __getitem__(self, val)中的self和val t.name='EGON' t['name'] = 'EGON2' del t['level'] del t.major print(t.__dict__) '''執行結果如下: Egon Egon {'name': 'EGON2'} '''總結
- 上一篇: 工业控制系统安全
- 下一篇: 单用户登陆demo-后者挤到前者,类似Q