面象物件程式設計學習筆記(2)

2022-07-26 18:54:13 字數 2519 閱讀 4784

類允許派生,可以建立乙個子類,它也是類,而且繼承了父類所有的特徵和屬性。

類體由所有宣告語句,類成員定義,資料屬性和函式組成。

類屬性僅與其被定義的類相繫結。

python嚴格要求,沒有例項,方法是不能被呼叫的。

方法必須繫結才能直接被呼叫。非繫結的方法可能被呼叫,但例項物件一定要明確給出,才能確保呼叫成功。

特殊的類屬性

c.__name__         類c的名字

c.__doc__            類c的文件字串

c.__bases__        類c的所有父類構成的元組

c.__dict__            類c的屬性

c.__module__     類c定義所在的模組

c.__class__          例項c對應的類 文件字串不能被派生類繼承,也就是說派生類必須含有它們自己的文件字串。

父類集的搜尋是按順序的,從左至右,按其在類定義父類引數時的順序。

對類的修改僅影響到此類的字典,父類的__dict__屬性不會被改動。

例項

通過呼叫類物件來建立例項 當類被呼叫,例項化的第一步是建立例項物件。一旦物件建立了,python檢查是否實現了__init__()方法。

任何所需的特定操作,都需要程式設計師實現__init__(),覆蓋它的預設行為。

__del__()析構函式要直到該例項物件所有的引用都被清除後才會執行。

__init__()建構函式只能被呼叫一次,一旦引用計數為0,則物件就被清除。

總結:

不要忘記首先呼叫父類的__del__()

呼叫del x不表示呼叫了x.__del__(),它僅僅是減少x的引用計數

__del__()未捕獲的異常會被忽略掉,不要在__del__()中乾與例項沒任何關係的事情 除非你知道正在幹什麼,否則不要去實現__del__()

如果你定義了__del__,並且例項是某個迴圈的一部分,垃圾**器將不會終止這個迴圈,需要顯式呼叫del

例項屬性

設定例項的屬性可以在例項建立後任意時間進行,也可以在能夠訪問例項的**中進行。

1. 在構造器中首先設定例項屬性

2. 預設引數提供預設的例項安裝(帶預設引數的__init__()初始化例項)

class

hotelroomcalc(object):

'hotel room rate calculater

'def

__init__(self, rt, sales=0.085, rm=0.1):

'''hotelroomcalc default arguments:

sales tax == 8.5% and room tax == 10%

'''self.salestax =sales

self.roomtax =rm

self.roomrate =rt

def calctotal(self, days=1):

'calculate total; default to daily rate

'daily = round((self.roomrate * (1 + self.roomtax + self.salestax)), 2)

return float(days) *daily

>>> from hotel import

hotelroomcalc

>>> sfo = hotelroomcalc(299)

>>>sfo.calctotal()

354.31

>>> sfo.calctotal(2)

708.62

>>> sea = hotelroomcacl(189, 0.086, 0.058)

traceback (most recent call last):

file

"", line 1, in

nameerror: name

'hotelroomcacl'is

notdefined

>>> sea = hotelroomcalc(189, 0.086, 0.058)

>>>sea.calctotal()

216.22

>>> sea.calctotal(4)

3. __init__()應當返回none

例項屬性與類屬性

類屬性難是與類相關的資料值,和例項屬性不同,類屬性和例項無關。

類屬性即使在多次例項化中呼叫類,它們的值都保持不變。

類屬性可以通過類或例項來訪問(例項沒有同名的類屬性)。

類屬性只能通過類來更新。

任何對例項屬性的賦值都會建立乙個例項屬性並且對其賦值,如果類屬性中存在同名的屬性,則會產生意想不到的***。

給乙個類屬性同名的例項屬性賦值,會有效地隱藏類屬性,但一旦刪除了這個例項屬性,類屬性又可以繼續使用。 在類屬性可變的(列表和字典),情況下以上不成立。

python學習筆記2(物件)

物件的屬性不能繼承。方法可以呼叫沒有的引數或方法,但執行時會報錯。property setter標記的方法可以當作屬性來用。class animal object def init self self.age yi def run self print self.name,is running cl...

Javascript學習筆記 2(物件 函式)

1 原始變數 number string boolean null undefined。變數記憶體存的就是值,按值傳遞的 2 引用變數 物件變數,變數記憶體存的是指標,所以是按指標傳遞 鑑別原始型別 typeof 但typeof null object 鑑別引用型別 obj instaceof co...

面象物件 自學二

一,實現介面 介面可以看作是多重繼承問題的解決方法,而且類似於其他物件導向程式設計語言所支援的介面實現。介面的思想是指定乙個實現了該介面的類必須實現的一系列函式。inte ce displayable 二,面象物件高階功能 1,const 這個常量可以在不需要初始化該類的情況下使用。class ma...