物件導向的三大特徵:封裝、繼承、多型
例如:
class
test
: a =
"hello world"
deff
(self)
:return
'hello world'
x = test(
)print
("類的屬性 a 為:"
, x.a)
print
("類的方法 f 輸出:"
, x.f(
))
這段**定義了乙個名為test的類,類裡封裝了屬性a和方法f,這兩個方法不能在外部直接呼叫,必須例項化test的物件x,然後通過x.《屬性名/方法名》
的方式進行呼叫。
因為封裝了屬性,因此不能直接在外部對該屬性賦值,但是開發需求中需要賦值或呼叫該屬性的值,此時就需要getter和setter方法。
class
test
: @property
defa
(self)
:return self.__a
@a.setter
defa(self, a)
: self.__a = a
t = test(
)t.a =
48print
(t.a)
該**中使用@property
註解來定義getter和setter方法
例如:
class
test
:def
__init__
(self)
: a =
64 aa =
"wfdwfa"
defac
(self)
:print
("hello world!"
)class
testson
(test)
:pass
t = testson(
)t.ac(
)
該**中testson類中並沒有定義任何方法和屬性,但是因為繼承了test類,所以可以使用test類中定義好的方法!
有時父類中的方法並不能完全滿足我們的需求,但是因為必須繼承父類中的所有方法,這個時候就需要重寫父類中的方法。重寫方法要點:方法名必須相同,引數也必須相同。
例如:
class
test
:def
__init__
(self)
: a =
64 aa =
"wfdwfa"
defac
(self)
:print
("hello world!"
)class
testson
(test)
:def
ac(self)
:print
("wooooooo you can really dance!!!"
)t = testson(
)t.ac(
)
此時列印輸出的就不再是父類中的helloworld,而是子類中定義的ac方法!
有時需要在子類中呼叫父類的方法
classa(
object):
def__init__
(self)
:print
('i am class a'
)class
b(a)
:def
__init__
(self)
:super()
.__init__(
)print
('yes'
)b = b(
)
該**中b類繼承於a類,所以使用super().__init__()
呼叫的就是a類中的構造方法,而不是自身。
同乙個方法,對不同的傳入引數,做出不同的反應。
class
cat:
defeat
(self)
:print
("貓吃魚"
)class
dog:
defeat
(self)
:print
("狗吃肉"
)def
eat(
object):
object
.eat(
)cat = cat(
)eat(cat)
dog = dog(
)eat(dog)
====
====
====
====
====
====
====
====
====
====
====
====
*****==
貓吃魚狗吃肉
這段**中同樣的eat方法,因為傳入物件的不同,給出了不同的執行結果,這就是多型。 python打卡第八天
一,字典 字典是另一種可變容器模型,且可儲存任意型別物件。字典的每個鍵值 key value 對用冒號 分割,每個對之間用逗號 分割,整個字典包括在花括號 中 格式如下所示 d 鍵必須是唯一的,但值則不必。值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。dict 建立字典 print ...
Python學習第八天
字典與集合 字典是一種列表,只不過其中儲存的元素成了鍵值對,字典的每個鍵值 key value 對用冒號 分割,每個鍵值對之間用逗號 分割,整個字典包括在花括號 中 格式如下所示 d 值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。乙個簡單的字典例項 dict1 dict2 dict ...
學習python 第八天
物件導向 多型 多種形態 繼承 重寫 類與類之間的關係 繼承 關聯 組合,聚合 依賴 關聯 乙個類的物件作為另乙個類的屬性 依賴 乙個類的物件作為另乙個類的方法的引數 耦合程度 繼承 關聯 依賴 封裝 類屬性 物件屬性 class a name 張三 類屬性 def init self,age se...