物件導向程式設計04

2021-09-24 03:39:07 字數 3823 閱讀 3992

內建函式issubclass()用於判斷類物件與類物件之間的關係。內建函式isinstance()用於判斷例項物件與類物件之間的關係。

內建函式issubclass接收兩個實參,

第乙個實參是類物件,

第二個實參是類物件或由類物件組成的元組。

當第二個實參是類物件時,如果第乙個實參是第二個實參的子類,那麼返回true.

當第二個實參是類物件組成的元組時,如果第乙個實參是第二 個實參中任意-乙個類物件的子類,返回true。

內建函式type( )用於獲得指定物件的型別。

例項物件的型別是其對應的類物件。

類物件的型別是type,也就是說,類物件是type的一乙個例項物件。

自定義函式物件的型別是function。

內建函式物件的型別是builtin_ function_ or_ method。

def do_ sth():

pass

print

(type

(do_ sth)

)<

class' function >

.print

(type

(dir))

<

class ' builtin_ function__or_ method >

print

(type

(dir()

)<

class

' list'

>

可以使用返算符==判斷某個対象的樊型是否是指定的奘型。

対於基本資料炎型,可以直接使用其対虛的奘名;如果不是基本資料型別,需要使用標準庫中的模快types中定義的変量。

print

(type(18

)=int)

true

print

(type

(' abc')==

str)

true

print

(type

(do_ sth)

= funct ion)

nameerror traceback (most recent call last)

input-18

-ec61cf84a741>

inprint

(type

(do_ sth)

= function)

nameerror: name' function'

isnot defined

print

(type

(print

)= builtin_ function_ or_ _me thod)

nameerror traceback (most recent call last)

input-19

-058b0c2c0889

>

in--

->

1print

(type

(print

)= builtin_ function_ _or_ method)

nameerror: name' builtin_ function_ _or_ method is

notdef ined

import types

print

(type

(do_ sth)

= types. functiontype)

print

(type

(print

)== types. builtinfunct iontype)

true

true

對於制定的類物件或例項物件,可以呼叫內建函式dir()獲得其所有可以訪問的屬性和方法(包括從父類中繼承的屬性和方法)的列表。

類物件與例項物件的結果是有區別的,類物件的結果中不包括例項屬性。

呼叫內建函式dir( )後的返回值中,很多屬性和方法都是以雙下劃線_開頭和結尾的, 這些屬性和方法中的絕大多數都繼承自類object。

以雙下劃線__開頭和結尾的屬性被稱為特殊屬性, 以雙下劃線_開頭和結尾的方法被稱為特殊方法。特殊屬性和特殊方法都是系統預定義的,我們自定義的屬性名和方法名不要以雙下劃線__開頭和結尾。在我們自定義類物件時,經常會重寫乙個或多個特殊方法,例如__ init__ 。 特殊方法會在特定的情形下被自動呼叫,很少需要手動呼叫特殊方法。

hasattr (object, name )

用於判斷指定的物件object是否有引數name指定的屬性或方法。

getattr(object, name [,default] )

用於獲取指定的物件object中名為name的屬性或方法。

如果不指定引數default,那麼當object中不存在名為name的屬性或方法時,丟擲attributeerror.如果指定了引數default,那麼當object中不存在名為name的屬性或方法時,就會返回default。getattr(object, name)等價於: object. name。

setattr( object, name, value )

用於在指定的物件obj ect中新增或修改名為引數name的屬性或方法,新增或修改後的值為value。setattr(obiect,. name, valye)等價於: obiect.name二value。

4. delattr(object , name )

用於刪除指定的物件object中名為引數name的屬性或方法。delattr(object, name)等價於: del object . name。

注意:只有在不知道物件資訊的情況下,才會去獲取物件的資訊。因此,如果可以直接寫: object . name,就不要寫為getattr(object, 』 name』)。

如果想讓標準算術運算子可以用於自定義類物件的例項物件,

必須在自定義類物件中實現標準算術運算子對應的以下特殊方法:

+對應的特殊方法是_ add__ ()和_ radd__ ();

-對應的特殊方法是_ sub___ ()和__ rsub__ ();

*對應的特殊方法是__ mul__ ()和__ .rmul__ ();

/對應的特殊方法是__ truediv__ ()和_ rtruediv__ ( );

//對應的特殊方法是__ floordiv__ ( )和_ rfloordiv__ ()。

類物件的特殊方法之_ str_ ()和 repr__ () 用於自定義並返回例項物件的字串表示形式。1.當在互動式命令列中直接列印一乙個例項物件時,

如果在例項物件對應的類物件中實現了特殊方法_ repr__ (), 會自動呼叫該方法;否則,會列印例項物件對應的類物件和例項物件在記憶體中的位址。2.當呼叫內建函式print列印- 個例項物件時,

如果在例項物件對應的類物件中實現了特殊方法__ str__ (), 會自動呼叫該方法;

否則,如果在例項物件對應的類物件中實現了特殊方法_ repr__ (), 會自動呼叫該方法;否則,會列印例項物件對應的類物件和例項物件在記憶體中的位址。

3.當呼叫內建函式str建立字串並且實參是-乙個例項物件時,

如果在例項物件對應的類物件中實現了特殊方法_ str__ (), 在內建函式st r的內部會自動呼叫該方法;

否則,如果在例項物件對應的類物件中實現了特殊方法_ repr__ (), 在內建函式str的內部會自動呼叫該方法;否則,會列印例項物件對應的類物件和例項物件在記憶體中的位址。

4.當呼叫內建函式repr建立字串並且實參是一乙個例項物件時,

如果在例項物件對應的類物件中實現了特殊方法_ repr__ (), 在內建函式repr的內部會自動呼叫該方法;否則,會列印例項物件對應的類物件和例項物件在記憶體中的位址。

物件導向 04

模組的概念,如何匯入模組 每乙個以副檔名py結尾的python源 檔案都是乙個模組,在模組中定義的全域性變數 函式 類 都是提供給外界直接使用的工具,模組相當於是乙個工具包 匯入模組的兩種方式 import 模組名1,模組名2 import 模組名1 import 模組名2 from 模組 impo...

Python物件導向04 物件導向封裝案例

封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部需求 小明體重75.0公斤 小明每次跑步會 0.5公斤 小明每次吃東西體重增加1公斤 class person 人類 def init ...

python 物件導向 04 物件導向封裝案例

封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法 物件方法的細節都被封裝在類的內部 需求 小明體重75.0公斤 小明每次跑步會 0.5公斤 小明每次吃東西體重增加1公斤 人類 def init self,name,w...