1.內建方法表示:__名字__
幾種名稱: 1)雙下方法 2)魔術方法 3)類中的特殊方法/內建方法
類中的每乙個雙下方法都有它自己的特殊意義;所有的雙下方法沒有 需要你在外部直接呼叫的
父類object都帶有這些方法,而總是有一些其他的 內建函式 特殊語法來觸發雙下方法
2.__call__()方法:
classa:
def__call__(self, *args, **kwargs):
print('
物件()自動觸發我!')
a =a()
a()
#這兩個步驟還可以寫為a()()
這時候就需要引入另乙個類,讓它執行__call__方法
classa:
def__call__(self, *args, **kwargs):
print('
執行call方法了')
class
b:
def__init__
(self,cls):
print('
在例項化a之前做一些事情')
self.a = cls() #
例項化a的物件
self.a() #
呼叫a類中的call方法
print('
在例項化a之後做一些事情')
b(a)
#只暴露b,不暴露a
2)__len__方法:
a:遇到len(obj)會自動觸發obj的__len__方法
classa:
def__init__
(self,obj):
self.obj =obj
def__len__
(self):
return
len(self.obj)
a = a('
wwwwww')
(len(a))
#結果為6
3)__str__方法:
a:會自動觸發該方法的幾種情況
1)print乙個物件相當於呼叫乙個物件的__str__方法
2)str(obj),相當於執行obj.__str__方法
3)'%s' % obj相當於執行了obj.__str__方法
b:如果類中沒有__str__方法,會自動執行父類的object的__str__方法,但是只會返回給你乙個記憶體位址,因為它不知道你想要得到什麼屬性;
classa:
pass
a =a()
(a)#
輸出結果:
<__main__.a object at 0x0000024f722690f0>
#類中含有__str__方法:
class
a:
def__str__
(self):
return ('
%s, %s, %s
')%(self.name,self.age,self.cls)
def__init__
(self,name):
self.name =name
self.age = 15self.cls = '
python
'a = a('
zhou')
(a)b = a('
liu'
(b)#
輸出結果
zhou, 15, python
liu, 15, python
c:有什麼用處,特別好用能不用你呼叫就自動輸出一些你需要顯示的內容;
4)__new__方法:
a:__new__和__init__的千絲萬縷
__new__:開闢記憶體空間,屬於物件的,把物件的空間作為返回值傳給self,執行init方法; 類的構造方法
__init__:給物件封裝屬性; 類的初始化方法
看他們的執行順序:
classa:
def__new__(cls, *args, **kwargs):
print('
執行了__new__方法')
return object.__new__
(cls)
def__init__
(self):
print('
執行了__init__方法')
a =a()
#執行結果
執行了__new__方法
執行了__init__方法
#所以__new__是在物件例項化之前呼叫的,還沒有開闢空間傳給self,所以這裡會把cls類的空間傳進來;
new的金典題目單例類:
單例類:在例項化物件後,每個物件的開闢的空間一樣,就是單例類;
classa: _name =none
def__new__(cls, *args, **kwargs):
ifnot
cls._name:
cls._name = object.__new__
(cls)
return
cls._name
def__init__
(self):
pass
a =a()
(a)b =a()
(b)#
輸出結果
<__main__.a object at 0x00000221704e9240>
<__main__.a object at 0x00000221704e9240>
Python內建的幾個函式
說到字串 string 相信大家都很熟悉了。它是我們最常用的資料型別之一,括在引號內。但是python中的字串操作,具體應該怎麼搞呢?string1 yyy zzz 字串1,類似於路徑 string2 123.456.789 字串2,類似於版本 string3 字串3,將下面的列表內容新增到裡面 j...
python的幾個內建函式
python的內建函式功能比較豐富,而且相當靈活,目前掌握了幾個比較常用的 1.lambda lambda其實就是一條語句,lambda x body。x是lambda函式的引數,引數可以有任意多個 包括可選引數 body是函式體,只能是乙個表示式,並且直接返回該表示式的值。f lambda x x...
python的幾個經典程式
1.python快速判斷乙個數是否為素數 本程式實現的功能是判斷乙個數是否為素數 n input 請輸入乙個整數 n int n if n 2 print n,是素數 偶數必然不是素數 elif n 2 0 print n,不是素數 else 大於5的素數必然出現在6的倍數的兩側 因為6x 2,6x...