1、在python的物件導向程式設計中,經常需要在類中建立靜態方法staticmethod()或者
類方法classmethod(),如:
class
testmethod:
deffoo
():print
'calling static method foo()'
foo = staticmethod(foo)
defbar():
print
'calling class method bar()'
bar = classmethod(bar)
這種宣告靜態方法(或類方法)的方式似乎有點多餘,除了上面的宣告方式外,還可以通過
函式修飾符進行宣告:
class
testmethod:
@staticmethod
deffoo
():print
'calling static method foo()'
@classmethod
defbar
():print
'calling class method bar()'
2、issubclass() ,判斷乙個類是另乙個類的子孫類:issubclass(sub,sup)
isinstance() , 判斷乙個物件是否是給定類的例項時,
3、hasattr()、getattr()、setattr()、delattr()
*attr系列函式可以再各種物件下工作,不限於類和例項。含義和字面意思一致。
4、dir()用在模組上是列出乙個模組所有的屬性資訊,也可以用在物件上。
5、super(type[,obj])
返回給定的type的obj的父類。實際上super()是乙個工廠函式,它建立乙個super object,其主要的
用途是用於查詢父類的屬性,如:
class
myclass:
def__init__
():pass
class
sonclass
(myclass):
def__init__
():
super.(myclass,self).__init__()
pass
5、vars(),返回物件的dict屬性,如果該物件沒有dict屬性,則會引發乙個typeerror異常
上例子:
class
c(object):
pass
c = c()
c.foo = 100
c.bar = 'python'
vars(c)
6、特殊方法定製類
特殊方法可用於模擬標準型別和過載操作符,下面列出部分特殊方法:
c.init(self [,arg1, …]) 構造器
c.new(self[,arg1,…]) 構造器 ,通常用在設定不變資料型別的子類。
c.del(self) 析構器
c.str(self) 可列印的字元輸出
c.call(self) 表示可呼叫例項
c.nonzero(self) 為object定義false值;內建bool()
c.len(self) 長度,內建len()
c.cmp(self,obj) 物件比較;內建cmp()
c.lt(self,obj) and 對應 < 及 <=操作符
c.gt(self,obj) and 對應 > 及 >=操作符
c.eq(self,obj) and 對應 == ,!= 及<> 操作符
c.*add(self, obj) 加;+操作符
c.*sub(self, obj) 減;-操作符
c.mul(self, obj) 乘;操作符
c.*div(self, obj) 除;/操作符
c.*truediv(self, obj) e true 除;/操作符
c.*floordiv(self, obj) e floor 除;//操作符
c.*mod(self, obj) 取模/取餘;%操作符
c.*divmod(self, obj) 除和取模;內建 divmod()
c.pow(self, obj[, mod]) 乘冪;內建 pow();*操作符
c.*lshift(self, obj) 左移位;《操作符
c.*rshift(self, obj) 右移;>>操作符
c.*and(self, obj) 按位與;&操作符
c.*or(self, obj) 按位或;|操作符
c.*xor(self, obj) 按位與或;^操作符
c.neg(self) 一元負
c.pos(self) 一元正
c.abs(self) 絕對值;內建 abs()
c.invert(self) 按位求反;~操作符
c.complex(self, com) 轉為 complex(複數);內建 complex()
c.int(self) 轉為 int;內建 int()
c.long(self) 轉為 long;內建 long()
c.float(self) 轉為 float;內建 float()
c.oct(self) 八進位制表示;內建 oct()
c.hex(self) 十六進製制表示;內建 hex()
c.coerce(self, num) 壓縮成同樣的數值型別;內建 coerce()
c.index(self) g 在有必要時,壓縮可選的數值型別為整型
c.len(self) 序列中項的數目
c.getitem(self, ind) 得到單個序列元素
c.setitem(self, ind,val) 設定單個序列元素
c.delitem(self, ind) 刪除單個序列元素
c.getslice(self, ind1,ind2) 得到序列片斷
c.setslice(self, i1, i2,val) 設定序列片斷
c.delslice(self, ind1,ind2) 刪除序列片斷
c.contains(self, val) f 測試序列成員;內建 in 關鍵字
c.*add(self,obj) 串連;+操作符
c.mul
函式式程式設計vs物件導向程式設計
什麼是物件導向,其實我也不是很懂,我以前一直認為物件導向就是繼承,而繼承就是虛函式,有時候在思考,真的是這樣子的嗎?錯了,不管虛函式的機制是為了繼承和多型而服務,而繼承和多型確實為了oo的思想而服務,怎麼說呢?我們都知道,當我們都知道學生a,b,c,d 都是學生,並且他們有一些共同的屬性,比如年齡,...
函式式程式設計 vs 物件導向程式設計
身為乙個程式設計師,我個人很喜歡早洗澡的時候去思考一些技術上的東西,今天有人問我什麼是物件導向,其實我也不是很懂,我以前一直認為物件導向就是繼承,而繼承就是虛函式,但是我洗澡的時候在思考,真的是這樣子的嗎?錯了,不管虛函式的機制是為了繼承和多型而服務,而繼承和多型確實為了oo的思想而服務,怎麼說呢?...
C 物件導向程式設計 建構函式
建構函式的相互呼叫又稱為 建構函式初始化器,這是c 的乙個特殊的語法 在有些時候,建構函式內包含一些共同的 為了達到 的復用性,函式初始化器很好的解決了這一問題 示例 如下 using system namespace mycsharppro private int age public perso...