六 類 物件與魔法方法

2021-10-08 21:08:56 字數 2888 閱讀 1783

1、類定義中哪些是類屬性,哪些是例項屬性?

python類資料屬性:定義在類裡面但在函式外面的變數,它們都是靜態的。

定義在__init__()方法裡的變數就是例項屬性,這些屬性只有物件被建立時才會被建立。

2、怎麼定義私有⽅法?

在 python 中定義私有方法只需要在函式名前加上兩個下劃線「__」,那麼這個方法(函式)就為私有的了。

3、嘗試執行以下**,並解釋錯誤原因:

classc:

defmyfun()

:print

('hello!'

) c = c(

) c.myfun(

)

nameerror: name 『c』 is not defined

錯誤原因:c = c()是類例項化,應該在類的外面,因此c = c() 和c.myfun()縮排不對,改正後**如下,再次執行:

classc:

defmyfun()

:print

('hello!'

)c = c(

)c.myfun(

)

仍然報出以下錯誤:

typeerror: myfun() takes 0 positional arguments but 1 was given

原因:呼叫 c.myfun()時,系統自動將類例項物件c傳入myfun(),但myfun()定義時缺少引數self,改正後再次執行,執行正確。

classc:

defmyfun

(self)

:print

('hello!'

)c = c(

)c.myfun(

)

hello!

4、按照以下要求定義乙個遊樂園門票的類,並嘗試計算2個**+1個小孩平日票價。

平日票價100元

週末票價為平日的120%

兒童票半價

class

ticket()

: ticket=

100def

weekend

(self)

: self.ticket *=

1.2return self.ticket

defchildren

(self)

: self.ticket *=

0.5return self.ticket

man=ticket(

)a=man.ticket

# a=man.weekend()

print

(a)child=ticket(

)# child.weekend()

b=child.children(

)print

(b)price=

2*a+b

print

(price)

1、總結多種魔法方法,如__new__ ,init,str,rstr,getitem,setitem等等,的使用方法。

①__new__:建構函式,建立並返回乙個例項物件,如果__new__只呼叫了一次,就會得到乙個物件。繼承自object的新式類才有__new__這一魔法方法。

引數:至少必須要有乙個引數cls,代表要例項化的類,此引數在例項化時由python直譯器自動提供。

返回值:必須要有返回值,返回例項化出來的例項。可以return 父類__new__出來的例項,或者直接是object的__new__出來的例項。若__new__沒有正確返回當前類cls的例項,那__init__是不會被呼叫的,即使是父類的例項也不行。

__new__是唯一在例項建立之前執行的方法,一般用在定義元類時使用。

②__init__:初始化函式,在建立例項物件為其賦值時使用,在__new__之後。

__init__必須至少有乙個引數self,就是這個__new__返回的例項,__init__是在__new__的基礎上可以完成一些其它初始化的動作。

init__不需要返回值。

③__str:在將物件轉換成字串 str(物件) 測試的時候,列印物件的資訊。

__str__方法必須要return乙個字串型別的返回值,作為對例項物件的字串描述。

str__實際上是被print函式預設呼叫的,當要print(例項物件)時,預設呼叫__str__方法,將其字串描述返回。如果不是要用str()函式轉換,當你列印乙個類的時候,那麼print首先呼叫的就是類裡面的定義的__str。

④__repr__:str的備胎,在有__str__的時候執行__str__,沒有實現__str__的時候,執行__repr__,repr(obj)內建函式對應的結果是__repr__的返回值

當你使用%r格式化的時候 觸發__repr__。

⑤__getitem__:定義獲取容器中元素的行為,相當於self[key]。

⑥__setitem__:定義設定容器中指定元素的行為,相當於self[key] = value。

2、利用python做乙個簡單的定時器類

要求:定製乙個計時器的類。

start 和stop 方法代表啟動計時和停止計時。

假設計時器物件t1 , print(t1) 和直接呼叫t1 均顯示結果。

當計時器未啟動或已經停止計時時,呼叫stop 方法會給予溫馨的提示。

兩個計時器物件可以進行相加: t1+t2 。

只能使用提供的有限資源完成。

類 物件與魔法方法

類屬性 num 0 例項屬性 self.x 4 self.y 5 c.count 6 在變數名或者函式名前加上兩個下劃線 這個函式或者變數就會變成私有 修改完的程式 class c def myfun self print hello c c c.myfun class ticket def ini...

類與物件(2) 魔法方法

定義init魔法方法,設定初始化屬性,訪問並呼叫 1.定義類 init魔法方法 width和height 新增例項方法 訪問例項屬性 2 建立物件 3 驗證成果 呼叫例項方法 class washer def init self 新增例項屬性 self.width 500 self.height 8...

ziheng 類與物件和魔法方法

class tangsen def init self self.name tangsen self.gongji 80 self.magic 500 self.hp 2000 self.speed 100 defhuo de hp self print self.hp defshe zhi hp ...