當前位置:首頁 » 編程語言 » python類的特殊方法

python類的特殊方法

發布時間: 2022-05-27 23:29:44

python的特殊方法__nonzero__()怎麼用什麼情況就會調用它,舉個例子,謝謝

類的__nonzero__方法用於將類轉換為布爾值。通常在用類進行判斷和將類轉換成布爾值時調用。比如語句if A: print 'foo'中就會調用A.__nonzero__()來判斷。下面這個程序應該能幫助你理解__nonzero__的作用。

class A:
def __nonzero__(self):
print 'A._nonzero__()'
return True

print 'A is not zero' if A() else 'A is zero'
print bool(A())

Ⅱ Python中的幾種特殊數據類型小結

下面介紹了Python中的6種特殊數據類型:

1.list:列表

是一種有序的數據集合,在列表數據結構中的類型並不唯一

定義形式:L=['Micha',100,True]

輸出整個列表的時候顯示為['Micha',100,True]

輸出單個的數值則為:Micha

a.訪問,直接使用L[0]表示第一個元素或者使用L[-1]表示最後一個數據,以此類推,但是注意訪問不能越界(訪問的序號不能超過元素的總數)。

b.添加新元素:使用L.append(100)直接將100加入列表末尾,或者使用L.insert(0,'paul')將paul插入任意位置。

c.刪除元素:L.pop()刪除最後一個元素,或者L.pop(2)刪除第2個位置的元素。

d.替換元素:直接賦值就可以了L[2]=100

2.tuple:元組

是一種有序的列表,但是其一旦創立完畢就不能夠更改,即不能插入,刪除裡面的元素,訪問的方式跟List結構一致。

a.t=()其列印後輸出的形式是()

若t中的數據為一個數字則需要在後面加逗號,以區分普通數字,如t=(1,),列印出(1,)而非1,多元素的話則沒有這個要求。

b.可以在不變的tuple中加入可變的List如t=(『a』,'b',['A','B'])

3.dict:字典

d = {

'Adam': 95,

'Lisa': 85,

'Bart': 59

}

len()函數可以計算任意集合的大小

其中可以簡單地使用d[key]的形式來查找對應的value,這和list很像,不同之處是,list必須使用索引返回對應的元素,而dict使用key,當key不存在的時候,使用該key可能出現錯誤,因此:要避免KeyError發生,有兩個辦法:

一是先判斷一下key是否存在,用in操作符:

if'Paul' in d:

print d['Paul']

如果'Paul'不存在,if語句判斷為False,自然不會執行print d['Paul'],從而避免了錯誤。

二是使用dict本身提供的一個get方法,在Key不存在的時候,返回None:

>>>print d.get('Bart')

59

a.dict中的key不能重復,且dict中的存儲的對應值沒有順序,列印出的東西可能是無序的

b.dict的更新:使用d[『paul']=72求解

c.dict遍歷:

d = {'Adam': 95, 'Lisa': 85, 'Bart': 59 }

>>>for key in d:

...print key

遍歷只能獲得key的值,需要通過key值獲得對應的value

4.set:集合

無序但是所有元素唯一,不重復

a.定義:s = set(['A', 'B', 'C']),查看set的內容:

>>>print s

set(['A','C', 'B'])

可以用in來判斷是否存在於集合中

b.遍歷

s =set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])

for xin s:

print x[0]+':',x[1]

c.添加元素到集合中

s.add(4)

d.刪除元素

s.remove(4)若該元素不在集合中將會報錯

5.Unicode編碼

Python在後來添加了對Unicode的支持,以Unicode表示的字元串用u'...'表示,比如:

printu'中文'

注意:不加u,中文就不能正常顯示中文。

a.轉義形式:u'中文 日文 韓文'

b.輸出多行:

u'''第一行

第二行'''

c.raw+多行的形式:

ur'''Python的Unicode字元串支持"中文",

"日文",

"韓文"等多種語言'''

如果中文字元串在Python環境下遇到UnicodeDecodeError,這是因為.py文件保存的格式有問題。可以在第一行添加註釋

# -*-coding: utf-8 -*-

目的是告訴Python解釋器,用UTF-8編碼讀取源代碼。然後用Notepad++另存為, 並選擇UTF-8格式保存。

6.raw的作用

如果一個字元串包含很多需要轉義的字元,對每一個字元都進行轉義會很麻煩。為了避免這種情況,我們可以在字元串前面加個前綴r,表示這是一個「raw」字元串,裡面的字元就不需要轉義了。例如:

r'(~_~)//'

但是r'...'表示法不能表示多行字元串,也不能表示包含'和"的字元串,如果要表示多行字元串。

Ⅲ python類中屬性方法的事件

1普通方法:直接用self調用的方法。



2私有方法:__函數名,只能在類中被調用的方法。



3屬性方法:@property,將方法偽裝成為屬性,讓代碼看起來更合理。



4特殊方法(雙下劃線方法):以__init__為例,是用來封裝實例化對象的屬性,只要是實例化對象就一定會執行__init方法,如果對象子類中沒有則會尋找父類(超類),如果父類(超類)也沒有,則直接繼承object(python 3.x)類,執行類中的__init__方法。



5類方法:通過類名的調用去操作公共模板中的屬性和方法。



6靜態方法:不用傳入類空間、對象的方法, 作用是保證代碼的一致性,規范性,可以完全獨立類外的一個方法,但是為了代碼的一致性統一的放到某個模塊(py文件)中。

Ⅳ python 特殊方法定製類__radd__ and __iadd__()如何使用的

__radd__是自定義的類操作符,執行「右加」。當python解釋器執行到a+b這樣的語句時,首先在查找a中有沒有__add__操作符,如果a中沒有定義,那麼就在b中查找並執行__radd__。
下面是個簡單例子
class A:
pass
class B:
def __radd__(self, a):
print 'B.__radd__'
return a.v + self.v
class C:
def __add__(self, b):
print 'C.__add__'
return self.v + b.v
a = A()
a.v = 1
b = B()
b.v = 2
c = C()
c.v = 3
print a + b #因為a中沒有__add__,所以調用的是B.__radd__
print c + b #c中有__add__,所以調用的是C.__add__

至於__iadd__(),是運算符類operator的成員函數,就是累加操作符的另一種調用形式。
a = operator.__iadd__(a, b)就等價於a += b

Ⅳ Python如何調用特殊函數

__call__
在Python中,函數其實是一個對象:
>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
由於 f 可以被調用,所以,f 被稱為可調用對象。
所有的函數都是可調用對象。
一個類實例也可以變成一個可調用對象,只需要實現一個特殊方法__call__()。
我們把 Person 類變成一個可調用對象:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
現在可以對 Person 實例直接調用:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
單看 p('Tim') 你無法確定 p 是一個函數還是一個類實例,所以,在Python中,函數也是對象,對象和函數的區別並不顯著。
任務
改進一下前面定義的斐波那契數列:
class Fib(object):
???
請加一個__call__方法,讓調用更簡單:
>>> f = Fib()
>>> print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Ⅵ 在Python中定義類時,與運算符「//」對應的特殊方法名為____。

在Python中定義類時,與運算符「//」對應的特殊方法名為__floordiv__

Ⅶ python中什麼是特殊方法

構造序列
1._len_(self)
2._getitem_(self,key)
3._setitem_(self,key,value)
4._delitem_(self,key)
程序演示:
myseq.py
class MySeq:
def __init__(self):
self.lseq = ["I","II","III","IV"]
def __len__(self):
return len(self.lseq)
def __getitem__(self,key):
if 0 <= key < 4:
return self.lseq[key]
if __name__ == '__main__':
m = MySeq()
for i in range(4):
print(m[i])

熱點內容
小米賬號為什麼設置不了密碼 發布:2025-02-12 15:03:57 瀏覽:263
android訪問網路許可權 發布:2025-02-12 14:55:20 瀏覽:88
原神文件夾 發布:2025-02-12 14:50:15 瀏覽:800
c語言數字翻譯 發布:2025-02-12 14:45:54 瀏覽:497
暗區突圍為什麼顯示伺服器維修 發布:2025-02-12 14:45:53 瀏覽:247
翻譯分為匯編和編譯 發布:2025-02-12 14:29:12 瀏覽:233
什麼是新聞編譯 發布:2025-02-12 14:23:12 瀏覽:853
如何查看手機存儲 發布:2025-02-12 14:21:15 瀏覽:50
cacti自定義腳本 發布:2025-02-12 14:21:13 瀏覽:313
編譯安卓步驟 發布:2025-02-12 14:19:39 瀏覽:222