封裝繼承
多型
class
man:
defeat
(self)
:print
("吃"
)def
slpee
(self)
:print
("睡"
)# 建立乙個例項
xm = man(
)xm.eat(
)
例項就是類建立出來的物件
# dir
defdemo()
:'''test'''
print
("這是乙個函式"
)print
(dir
(demo)
)
print
(xm)
# <__main__.man object at 0x0000023a821c5be0>
# man是乙個類
xm = man(
)xh = xm
print
(xh)
#<__main__.man object at 0x0000013814155cc0>
print
(xm)
#<__main__.man object at 0x0000013814155cc0>
xm.name =
"小明"
class
man:
def__init__
(self,name ="")
:# __init__內定義類的屬性
self.name = name
class
man:
def__del__
(self)
:pass
__ str__
必須的返回乙個字串
class
man:
def__str__
(self)
:return self.name
python本身沒有任何機制阻止你幹壞事,一切全靠自覺!!!
class
women
(object):
"""docstring for women"""
def__init__
(self,name,):
self.name = name
# 私有屬性
self.__age =
18#私有方法
def__secret
(self)
:print
("我今年%d歲了"
%(self.__age)
)xh = women(
"小紅"
)
如果外界需要訪問私有屬性name我們可以給類增加get_name()函式
如果外界需要修改私有屬性name我們可以給類增加set_name()函式
私有變數的訪問繼承分為單繼承
和多繼承
繼承是指:子類從父類 中依據父類的屬性和方法的訪問許可權,繼承屬性和方法
# 單繼承簡例
class
animal
(object):
defeat
(self)
:print
("吃"
)class
cat(animal)
:pass
xm = cat(
)xm.eat(
)# 吃
使用類名.__mro__
檢視類的都方法解析順序
# 多繼承簡例
class
animal
(object):
defeat
(self)
:print
("吃"
)class
dog(animal)
:def
dark
(self)
:print
("汪汪汪!!!"
)class
cat(animal)
:def
catch_mouse
(self)
:print
("抓老鼠"
)class
goddog
(dog,cat)
:pass
# 神犬旺財 會汪汪叫也會抓老鼠
wc = goddog(
)wc.dark(
)wc.catch_mouse(
)# 檢視mro順序
print(goddog.__mro__)
在定義類的時候如果沒有父類,統一使用objectpy3的直譯器也會預設用object
不同的子類物件 呼叫相同的父類方法,產生不同的結果增加**的靈活性
以繼承和重寫父類方法為前提
是呼叫方法的技巧,不會影響類的內部設計
# 多型簡例
class
dog(
object):
def__init__
(self,name)
: self.name = name
defgame
(self)
:print
("在地上玩耍"
)class
goddog
(dog)
:''' dog 的 __init__ 也會被繼承'''
defgame
(self)
:print
("狗上天"
)class
person()
:def
__init__
(self,name)
: self.name = name
defgamewithdog
(self,dog)
:print
("%s 和 %s 快樂的玩耍"
%(self.name,dog.name)
) dog.game(
)xm = person(
"小明"
)xh = dog(
"小黑"
)wc = goddog(
"旺財"
)xm.gamewithdog(wc)
不需要建立物件,不會隱式傳遞self呼叫靜態方法不需要建立物件
# 靜態方法
class
time
(object):
def__init__
(self)
:pass
@staticmethod
deftime()
:print
("滴答滴答"
)# 呼叫靜態方法不需要建立物件
time.time(
)
# 類屬性簡例
class
gun(
object):
"""槍類 gun_count:記錄槍的數量"""
gun_count =
0def
__init__
(self, name)
: self.name = name
# 注意語法 類名.類屬性
gun.gun_count +=
1def
__del__
(self)
:# 類名.類屬性
gun.gun_count -=
1t1 = gun(
"手槍"
)t2 = gun(
"vector"
)print
(gun.gun_count)
# 也可以使用變數名來查詢類屬性
# 類方法
class
gun(
object):
"""槍類"""
def__init__
(self, name)
: self.name = name
@classmethod
defshut
(cls)
:print
("xiu~~~"
)t2 = gun(
"vector"
)gun.shut(
)t2.shut(
)
注意語法格式:類方法前面需要用修飾器
@classmethod
來標識,告訴直譯器這是乙個類方法和物件的第乙個引數必須是
self
一樣,類方法第乙個引數必須是cls
在方法內部:
python 物件導向筆記
python 物件導向小結,最近在學習python,在學習到物件導向時有些記不住,特寫此筆記 1.定義類 class people num 0 def sayhello self print hello 2.定義物件 p people p.sayhello 3.建構函式 init class peo...
Python物件導向筆記
1.最簡單的類的定義 class student name lili age 0 sum1 0def init self,name,age,sum1 建構函式 self.name name self.age age self.sum1 sum1 defprint msg self print sel...
Python 物件導向(筆記)
標籤 空格分隔 2018 05 10 類 具有相同屬性和方法的物件集合 物件 萬物皆物件,具體實物和行為 類的建立 class cat 貓類 age 1 類成員,特徵 建立建構函式 def init self,name,color self.name name self.color color re...