coach的學習日記 7 21

2021-09-25 10:52:24 字數 4645 閱讀 3269

coach的學習日記

一般來說可以通過._的方式來說明某個物件是受保護的。使用property包裝器可以使得物件的訪問安全和方便。

如下**:

class

person

(object):

def__init__

(self, name, age)

: self._name = name

self._age = age

# 訪問器 - getter方法

@property

defname

(self)

:return self._name

# 訪問器 - getter方法

@property

defage

(self)

:return self._age

# 修改器 - setter方法

@age.setter

defage(self, age)

: self._age = age

defplay

(self)

:if self._age <=16:

print

('%s正在玩飛行棋.'

% self._name)

else

:print

('%s正在玩鬥地主.'

% self._name)

defmain()

: person = person(

'王大錘',12

) person.play(

) person.age =

22 person.play(

)# person.name = '白元芳' # attributeerror: can't set attribute

if __name__ ==

'__main__'

: main(

)

在這段程式中age通過修改器進行了定義,因此在main中可以直接進行訪問和修改。但是name沒有,因此無法進行直接修改。

結果如下圖:

有的時候,我們希望某個類只能繫結某些屬性,那麼我們可以通過_slot_來將它與一些屬性進行繫結。如下所示:

class

person

(object):

# 限定person物件只能繫結_name, _age和_gender屬性

__slots__ =

('_name'

,'_age'

,'_gender'

)def

__init__

(self, name, age)

: self._name = name

self._age = age

在上面的語句中,通過_slot_person與name、age、gender繫結,name在之後的函式中,就不能為person繫結新的屬性

除了在class中通過def來宣告方法之外,還存在兩種方法,即靜態方法和類方法,它們並不一定是物件方法,比如宣告一種方法來判斷輸入的三條邊能否生成乙個三角形。這個方法在使用的時候,物件還沒有被建立出來。靜態方法的示例如下:

from math import sqrt

class

********

(object):

def_init_

(self,a,b,c)

: self._a=a

self._b=b

self._c=c

@staticmethod

#靜態方法

defis_valid

(a,b,c)

:return a+b>c and a+c>b and b+c>a

在上述的語句中,is_valid是乙個靜態方法。在呼叫該函式時,可以在生成物件之前呼叫,判斷三條邊是否可以構成乙個三角形。

def main

a=3,b=

4,c=

5if ********.is_valid(a,b,c)

t= ********(a,b,c)

在主函式中,首先用靜態方法判斷abc是否能構成三角形,之後再生成物件。

類方法則是在類中宣告的方法。同樣,它可以用於生成乙個物件,而不是在生成物件後再使用該方法。

from time import time, localtime, sleep

class

clock

(object

)def

_init_

(self,..

.,..

..):

....

....

....

@classmethod

defnow

(cls)

: ctime = localtime(time())

return cls(ctime.tm_hour,ctime.tm_min,ctime.tm_sec)

類方法的第乙個引數約定為cls,它代表和該類相關資訊的物件。這樣乙個類方法用於讀取當前電腦的時間。

def

main()

: clock = clock.now(

)

在主函式中採用如下語句就完成了乙個當前時鐘的物件的建立。

繼承即用子類物件去繼承父類物件的屬性,並擁有更多獨有的屬性。

class

person

(object

)def

_init_

(self,name,age)

: self._name = name

self._age = age

class

student

(person)

def_init_

(self,name,age,gender)

:super()

._init_(name,age)

self._gender = gender

student子類繼承了person父類,並且新增了乙個屬性gender。

子類在繼承了父類的方法後,可以對父類已有的方法給出新的實現版本,這個動作稱之為方法重寫(override)。通過方法重寫我們可以讓父類的同乙個行為在子類中擁有不同的實現版本,當我們呼叫這個經過子類重寫的方法時,不同的子類物件會表現出不同的行為,這個就是多型(poly-morphism)。

from abc import abcmeta,abstractmethod

class

pet(

object

,metaclass=abcmeta)

:def

_init_

(self,nickname)

: self._nickname = nickname

@abstractmethod

defmake_voice

(self)

:pass

上述**將pet處理成乙個抽象的類,這種類並不能直接建立物件,而是讓別的類去繼承他。abc模組中的abcmetaabstractmethod起到包裝器的效果。

class

dog(pet)

:"""狗"""

defmake_voice

(self)

:print

('%s: 汪汪汪...'

% self._nickname)

class

cat(pet)

:"""貓"""

defmake_voice

(self)

:print

('%s: 喵...喵...'

% self._nickname)

defmain()

: pets =

[dog(

'旺財'

), cat(

'凱蒂'

), dog(

'大黃')]

for pet in pets:

pet.make_voice(

)if __name__ ==

'__main__'

: main(

)

在main函式中,使用的方法名make_voice是相同的,但是不同物件的方法不同,這就是多型。

coach的學習日記7 11

coach的學習日記 2019.7.11 從今天開始要更加努力了呀!今天學習有關python的基礎知識。c 更貼近於機器,而python更貼近於人的思考方式。python的 優雅精煉,可讀性更高。python的分支語句和c 很相似,可以使用if else elif來實現 分段函式 x float i...

Intel發布開源增強學習框架Coach

本文講的是intel發布開源增強學習框架coach,今天,英特爾發布了乙個新的開源增強學習框架coach。該框架利用多核cpu處理能力,用於訓練和評估增強學習agent。coach包含一些領先的增強學習演算法的多執行緒實現,適用於各種遊戲和機械人環境。它能夠在台式計算機上高效地訓練強化學習agent...

7 21python學習打卡

注釋 關於注釋有兩種使用方法 一種是 作為區間注釋,在三引號中所有內容為標註內容。還有是 作為某一些 後面的解釋說明。這些運算子在很多 中起到補充解釋 得到作用,如果不懂很肯能會把他們當成 一頭霧水。運算子 對於一些普通的運算子沒有什麼好說的,相較於c 而言python中多了冪運算與 整除 例如 2...