1. 程式人生 > >30.面向物件中常用內建函式與過載函式

30.面向物件中常用內建函式與過載函式

 內建函式:類中特殊功能
  • __init__(self):      ###為例項物件賦值
     1,可以沒有這個函式 例項沒資料      2,資料初始化函式         3,在例項化時,自動呼叫      4,init函式只能返回None      ###TypeError: __init__() should return None, not 'int'
class A(object):
    def __init__(self):    #init自動呼叫
        print('我是init')
        self.num = 1
a = A()

執行結果:

我是init
  • __new__(self):        ###建立例項物件,簡稱構造器
     1,在init函式之前呼叫,自動呼叫         2, 初始化例項記憶體空間,建立一個殼子         3, 必須要返回一個例項物件
class A(object):
    def __new__(self):  #建立例項物件,構造器   new函式是可以不寫的,面向物件預設自帶
        print('我是new')
        return super(A,self).__new__(self)   #new函式必須要返回一個例項物件
    def __init__(self):   #為例項物件賦值
        print('我是init')
        self.num = 1
a = A()

執行結果:

我是new
我是init
  • __del__(self):          ###拆除釋放掉骨架,簡稱析構器 (一般來說可以不定義,因為記憶體便宜了,優秀的程式設計師想要寫的更好就可以用這個函式釋放一下記憶體,就算不寫也不會影響什麼,除非你的資料比較大幾百兆甚至更多)
     1,在物件釋放的時候 自動呼叫         2,用來釋放資料記憶體
class A(object):
    def __new__(self):  #建立例項物件,構造器   預設是可以不寫的
        print('我是new')
        return super(A,self).__new__(self)   #new函式必須要返回一個例項物件
    def __init__(self):   #為例項物件賦值
        print('我是init')
        self.num = 1
    def __del__(self):
        del self.num
        print('我是del,資料記憶體釋放完畢')
a = A()

執行結果: 

我是new
我是init
我是del,資料記憶體釋放  
  • __slots__ = ('name','age')
    1,定義當前的例項屬性可以有那些,如果不是定義的就會報錯:AttributeError: 'A' object has no attribute 'name1'
class A(object):
    def __init__(self):   #為例項物件賦值
        self.age = 20
        self.name = '小紅' 
        print('我是%s,今年%s歲' % (self.name,self.age))
    __slots__ = ('age','name')
a = A()

執行結果:  

我是小紅,今年20歲
 過載這些內建函式:運算子內建函式
  • 繼承重寫:運算子  (記住要時刻要用dir函式檢視內建函式,help檢視函式的幫助文件)
    1, +:__add__     2, -:__sub__     3, *:__mul__     4, /:__floordiv__     5, == : __eq__     6, > : __gt__     7,>= :__ge__     8,< : __lt__     9,<= : __le__
  • 繼承重寫:操作符
    1, []:getitem