物件導向程式設計 函式

2021-07-03 22:41:51 字數 4047 閱讀 9520

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...