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
模組中的abcmeta
和abstractmethod
起到包裝器的效果。
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...