乙個基礎的類定義
class
myclass
:"""這裡是類文件注釋"""
# 定義一些基本資料成員, 為public
# 這裡相當於static變數, 是可以直接通過類名訪問的
name =
"" age =
0# 定義一些私有屬性&方法, 為private
__weight =
0def
__privatefun()
:#do something
pass
# 初始化方法, 將在類物件建立時被呼叫
def__init__
(self)
:# 執行一些內容
pass
# 然後是一些類方法
deffun1
(self)
:pass
幾個注意點:
def
關鍵字可以定義乙個方法, 但必須包含self
引數, 且必須在第乙個
self引數無需顯式傳參, 在呼叫時可忽略
參考部落格:c++中, 類資料成員即為靜態資料成員, 需要使用static訪問, 而物件資料成員跟隨物件繫結
python中:
class
derivedclassname
(baseclassname1, baseclassname2, baseclassname3)
:1>..
.
幾個注意點:
python支援多繼承
所以子類在使用基類的方法時, 若沒有顯式指定, 則將從左到右的從基類中搜尋匹配的方法名
如果基類中有重名方法名, 則需要注意這一點
class
people
:#定義基本屬性
name =
'' age =
0#定義私有屬性,私有屬性在類外部無法直接進行訪問
__weight =
0#定義構造方法
def__init__
(self, n, a, w)
: self.name = n
self.age = a
self.__weight = w
defspeak
(self)
:print
("%s 說: 我 %d 歲。"
%(self.name, self.age)
)#單繼承示例
class
student
(people)
: grade =
''def
__init__
(self, n, a, w, g)
:#呼叫父類的構函
people.__init__(self, n, a, w)
self.grade = g
#覆寫父類的方法
defspeak
(self)
:print
("%s 說: 我 %d 歲了,我在讀 %d 年級"
%(self.name, self.age, self.grade)
)#另乙個類,多重繼承之前的準備
class
speaker()
: topic =
'' name =
''def
__init__
(self, n, t)
: self.name = n
self.topic = t
defspeak
(self)
:print
("我叫 %s,我是乙個演說家,我演講的主題是 %s"
%(self.name, self.topic)
)#多重繼承
class
sample
(speaker, student)
: a =
''def
__init__
(self, n, a, w, g, t)
: student.__init__(self, n, a, w, g)
speaker.__init__(self, n, t)
if __name__ ==
'__main__'
: test = sample(
"tim",25
,80,4
,"python"
) test.speak(
)
引用的基類必須與子類在同乙個作用域, 即可以被子類訪問到
若要引用其他模組中的類, 則可以使用.
運算子
class
derivedclassname
(modname.baseclassname)
:
與c++相似, 在子類中定義乙個與基類相同名稱的方法會將基類中的方法覆蓋, 而後呼叫子類的該方法, 執行的便是子類中的定義
class
parent
:# 定義父類
defmymethod
(self)
:print
('呼叫父類方法'
)class
child
(parent)
:# 定義子類
defmymethod
(self)
:print
('呼叫子類方法'
)c = child(
)# 子類例項
c.mymethod(
)# 子類呼叫重寫方法
這玩意算是每個類中隱式呼叫的方法, 過載之後相當於c++的運算子operator過載
__init__ # 建構函式,在生成物件時呼叫
__del__ # 析構函式,釋放物件時使用
__repr__ # 列印,轉換
__setitem__ # 按照索引賦值
__getitem__ # 按照索引獲取值
__len__ # 獲得長度
__cmp__ # 比較運算
__call__ # 函式呼叫
__add__ # 加運算
__sub__ # 減運算
__mul__ # 乘運算
__div__ # 除運算
__mod__ # 求餘運算
__pow__ # 乘方
例子:
class
vector
:def
__init__
(self, a, b)
: self.a = a
self.b = b
def__str__
(self)
:return
'vector (%d, %d)'
%(self.a, self.b)
def__add__
(self, other)
:return vector(self.a + other.a, self.b + other.b)
if __name__ ==
'__main__'
: v1 = vector(2,
10)v2 = vector(5,
-2)print
(v1 + v2)
vector (7, 8)
補交課下測試(ch12併發程式設計) 08 第八周
有關執行緒圖,下面說法正確的是 a 圖的原點表示沒有任何執行緒完成一條指令的初始狀態 b 向右向上是合法的轉換 c 向左向下是合法的轉換 d 對角線是合法的轉換 e 乙個程式執行的歷史被模型化成狀態空間中的一條軌跡線 f 進度圖中,兩個臨界區的交集形成不安全區 正確答案 a b e f 下面 對於併...
python基礎筆記 12 物件導向一
先從類和物件說起 類是指物件的各種型別,又稱抽象物件 開發物件 通過類建立物件,又稱例項化物件 一類物件 通過同乙個類建立的物件 屬性 物件中的變數 自定義類 class 類名 塊class myclass pass print id myclass type myclass myclass 類物件...
筆記12 物件導向
物件導向 q 小明同學讀 三國 a 找物件 什麼是物件?在客觀世界中可以描述的物品 看得見,摸得著 小明 是什麼?人 人類中的乙個物件 三國 是什麼?書 書籍類中的乙個物件 在計算機中如何能夠描述小明和三國 string name 小明 int age char 可以讀書的 string booln...