Python 類和對象-上
阿新 • • 發佈:2017-12-01
ima 類型 strong 對象 glin ida clas count als
#類和對象
class Human:
#屬性 -> 成員屬性(變量)
ear = 2
mouth = 1
sex = ‘man‘
age = 28
name = ‘zhangwang‘
married = False
color = ‘yellow‘
#特征 -> 成員方法(函數)
def walk(self):
print(‘直立行走‘)
def eat(self):
print(‘吃飯‘)
def sleep(self):
print (‘睡覺‘)
def playgame(self):
print(‘打遊戲‘)
#查看類的值
print(Human)
#類的類型
print(type(Human))
#實例化對象操作
wangwang = Human()
#打印對象的值
print(wangwang)
#打印對象的類型
print(type(wangwang))
#檢測類的成員(在類中聲明的成員都可以看到)
print(Human.__dict__)
#檢測對象中的成員
print(wangwang.__dict__)
print(wangwang.sex)
class GF:
#屬性
sex = ‘女‘
age = 18
height = ‘170‘
weight = ‘50kg‘
threeWei = (‘36E‘,‘2.1‘,‘108CM‘)
#方法
def guang(self):
print(‘guang‘)
def eat(self):
print(‘chi‘)
def cry(self):
print(‘wu‘)
#類的基本操作
#訪問
print(GF.sex)#屬性
GF.eat(1)#方法
#修改
print(GF.age)
GF.age = 22#屬性
print(GF.__dict__)
#定義一個函數
‘‘‘
def mycry():
print(‘Do not cry‘)
GF.cry = lambda :print(‘啊嗚‘)#方法
GF.cry = mycry#方法
GF.cry()
‘‘‘
#添加
GF.hobby = ‘act‘#屬性
print(GF.__dict__)
GF.upsky = lambda : print(‘upsky‘)#方法
GF.upsky()
#刪除
del GF.threeWei
print(GF.__dict__)
del GF.cry
print(GF.__dict__)
#對象的基本操作
bingbing = GF()
print(bingbing.__dict__)
#訪問
print(bingbing.sex)#屬性
bingbing.eat()#方法
#修改
bingbing.age = 28 #屬性 修改屬性只會影響當前對象本身
print(bingbing.__dict__)
bingbing.cry = lambda : print(‘bigcry‘)
print(bingbing.__dict__)
bingbing.cry()
#添加操作
bingbing.cloth = ‘一襲長裙‘#屬性
print(bingbing.__dict__)
bingbing.walk = lambda : print(‘走紅毯‘)#方法
print(bingbing.__dict__)
bingbing.walk()
#刪除
bingbing.water = ‘more‘
bingbing.action = lambda : print(‘專業演員‘)
print(bingbing.__dict__)
del bingbing.water#屬性
del bingbing.action#方法
print(bingbing.__dict__)
#關於self
‘‘‘
通過類調用的函數: 綁定類的方法
通過對象調用的函數: 非綁定類的方法
‘‘‘
class Human:
#屬性
age = 18
sex = ‘female‘
name = ‘sanpao‘
#方法
def eat(self):
print(self)#通過類來調用的時候self只是函數的一個普通形參,必須給實參!
print(‘吃西瓜‘)
def drink(self):
print(self)#通過對象調用的時候self接受的肯定是當前的對象!此處的self不是關鍵字 只是一個形參,名字可以修改,但是推薦用self
print(‘喝西瓜汁‘)
#綁定類的方法(肯定)
def la():
print(‘puchi‘)
#綁定類的方法/非綁定類的方法(取決於怎麽使用)
def sa(arg):
print(‘hualala‘)
#通過類調用
Human.eat(‘nidaye‘)
#通過對象調用
zw = Human
zw.drink(1)
#類來訪問sa方法(綁定類的方法)
Human.sa(1)
#通過對象方法sa方法(非綁定類的方法)
zw.sa(1)
#人類
class Human:
#屬性
age = 18
#私有化封裝成員屬性[只能在當前結構中使用]
__sex = ‘male‘
color = ‘yellow‘
hair = ‘black‘
#方法
def say(self):
print(‘ayi‘)
def walk(self):
print(‘sousou‘)
#私有化成員方法(只能在當前類或者對象的結構中訪問)
def __niao(self):
print(‘xuxu‘)
#測試:自己訪問自己的私有成員
def demo(self):
#訪問私有方法niao
self.__niao()
print(‘測試私有成員的訪問‘)
#實例化對象
tbw = Human()
#調用tbw的成員
‘‘‘
print(tbw.age)
print(tbw.hair)
print(tbw.color)
tbw.say()
tbw.walk()
‘‘‘
#相當於別人叫你的名字 想查看你的性別[私有化成員不可以在類/對象的當前結構外訪問]
#print(tbw.sex)
#tbw.niao()
#訪問測試方法demo[私有化成員可以在類/對象的當前結構中訪問]
#tbw.demo()
#Python對私有成員的封裝實際上使用了改名策略(name mangling)
print(Human.__dict__)
print(tbw._Human__sex)
tbw._Human__niao()
print(Human._Human__sex)
Human._Human__niao(1)
#繼承
#劉備類:父類 -> 被其他類繼承的類稱之為父類(超類,基類)
class LiuBei:
#屬性
familyname = ‘劉‘
firsttime = ‘備‘
sex = ‘man‘
money = ‘100‘
country = ‘蜀國‘
wife = (‘甘夫人‘,‘糜夫人‘,‘孫尚香‘)
#方法
def say(self):
print(‘險損我一員大將‘)
#非綁定類的方法[對象訪問]
def drink(self):
print(self)
print(‘來幹了這杯‘)
def walk(self):
print(‘gogo‘)
#綁定類的方法
def la():
print(‘hualala‘)
#劉禪類:子類 -> 繼承其他類的類稱之為子類(派生類)
class LiuShan(LiuBei):
#子類獨有的成員
#屬性
weight = ‘180斤‘
#方法
def douququ(self):
print(‘此間樂,不思蜀‘)
#重載父類方法
def say(self):
print(‘劉備baba‘)
#重載父類的drink方法,但是還要將父類中操作拿過來使用
def drink(self):
print(‘舉起筷子,夾一口菜‘)
#喝酒 通過對象調用的方法的重載(推薦使用super().方法名())
super().drink() #LiuBei.drink(self)
#重載父類的la方法,但是還要將父類中操作拿過來使用
def la():
print(‘準備好紙‘)
#調用父類的la方法(推薦使用類名.方法名)
LiuBei.la()
#查看劉禪類
print(LiuShan.__dict__)#繼承操作不會將成員直接復制到子類中
print(LiuShan.sex)
LiuShan.walk(1)
#print(LiuShan.wife)
‘‘‘
1.所有的類的父類都是object子類
2.子類繼承父類則可以訪問父類的所有成員.(私有成員除外)
3.子類繼承父類並不會將父類的所有成員復制到子類當中去,訪問父類成員是間接通過父類來訪問的(目的:節省資源)
4.子類可以具有自己獨有的屬性和方法
5.子類可以重載父類中的方法,只需要設置和父類指定成員相同的名稱即可實現重載,重載之後的成員,子類只會訪問當前類中的成員,而不會調用父類中同名的成員
6.子類中如果重載父類的方法,並且還想將重載的父類方法借調過來使用,可以在重載的方法中使用如下方法
[父類名.方法()](適合類) 或者 [super().方法()](適合對象)
‘‘‘
result = issubclass(type,object)
print(result)
#訪問子類獨有的成員
LiuShan.douququ(1)
print(LiuShan.weight)
#訪問繼承來的方法
LiuShan.say(1)
#訪問重載並且調用了父類的方法的方法
LiuShan.la()
ls = LiuShan()
ls.drink()
#Python語法中沒有受保護的語法,程序員約定一種操作來實現受保護
class Father:
#屬性
sex = ‘man‘
#受保護的
_money = 1000
color = ‘yellow‘
#私有化
__wife = ‘bingbing‘
#方法
def eat(self):
print(Father._money)
print(‘吃吃吃‘)
def niao(self):
print(‘嘩嘩嘩‘)
class Son(Father):
#添加一個子類的方法用於測試子類中的訪問
def test():
#方式訪問父類中私有成員
#print(Father.wife)
#print(Son.wife)
#訪問父類中公共的成員
print(Son.color)
#訪問受保護的成員
print(Son._money)
Son.test()
Father.eat(1)
print(Father._money)
#受保護的定義
‘‘‘
私有化:只能在類或者對象的結構中訪問
公共的:可以在任何位置訪問
受保護:可以在當前類或者對象 和子類或者子類對象中訪問
類內 子類中 類外部
私有化: √ × ×
受保護: √ √ √(×類外部應該不能訪問)
公共的: √ √ √
‘‘‘
#單繼承
class Biology:
#屬性
life = ‘活的‘
#方法
def shengzhi(self):
print(‘生育後代‘)
class animal(Biology):
#屬性
age = 18
#方法
def jiao(self):
print(‘叫兩聲聽聽‘)
class mammal(animal):
#屬性
gen = ‘胎生‘
#方法
def weinai(self):
print(‘幹了這杯奶‘)
class Human(mammal):
#屬性
name = ‘囡囡‘
def dapai(self):
print(‘王炸‘)
#實例化對象操作
zb = Human()
zb.dapai()
zb.weinai()
zb.jiao()
zb.shengzhi()
#多繼承
class GrandPa:
def damajiang(self):
print(‘大三元‘)
class GrandMa:
def doudizhu(self):
print(‘飛機‘)
class LaoLao:
def dance(self):
print(‘彎彎的河水天上來‘)
class LaoYe:
def zhajinhua(self):
print(‘嘩嘩嘩‘)
class PaPa:
def zhuanqian(self):
print(‘賺錢‘)
class MaMa:
def huaqian(self):
print(‘花錢‘)
class LaoWang:
def fanqiang(self):
print(‘FQ‘)
class Son(LaoWang,MaMa,PaPa,LaoYe,LaoLao,GrandMa,GrandPa):
def kengdie(self):
print(‘我老子是劉備‘)
#實例化對象
ls = Son()
ls.kengdie()
ls.fanqiang()
ls.huaqian()
ls.doudizhu()
ls.dance()
ls.damajiang()
ls.zhajinhua()
ls.zhuanqian()
#菱形繼承
‘‘‘
動物類
人類 鳥類
鳥人類
‘‘‘
#動物類
class Animal:
#屬性
pass
#方法
def say(self):
print(‘Animal張開嘴‘)
print(‘Animal合上嘴‘)
#人類
class Human(Animal):
#屬性
pass
#方法
def say(self):
print(‘人類張開嘴‘)
#調用動物類的say方法
super().say()
print(‘人類合上嘴‘)
#鳥類
class Bird(Animal):
#屬性
pass
#方法
def say(self):
print(‘鳥類張開嘴‘)
#調用動物類的say方法
super().say()
print(‘鳥類合上嘴‘)
#鳥人類
class Birdy(Human,Bird):
#屬性
pass
#方法
def say(self):
print(‘鳥人類張開嘴‘)
#鳥類的say
Bird.say(self)
#人類say
Human.say(self)
print(‘鳥人類合上嘴‘)
#實例化鳥人對象
by = Birdy()
by.say()
#查看繼承關系的mro列表
result = Birdy.mro()
print(result)
#mixin設計模式
#水果類
class Fruit:
pass
#南方水果類
class SouthFruit(Fruit):
pass
#北方水果類
class NorthFruit(Fruit):
pass
#北方禮物水果
class NorthGiftFruit(NorthFruit):
pass
#北方非禮物水果
class NorthNotGiftFruit(NorthFruit):
pass
#南方禮物水果
class SouthGiftFruit(SouthFruit):
pass
#南方非禮物水果
class SouthNotGiftFruit(SouthFruit):
pass
#蘋果
class Apple(NorthGiftFruit):
pass
#梨
class Pear(NorthNotGiftFruit):
pass
#桔子
class Orange(SouthGiftFruit):
pass
#香蕉
class Banana(SouthNotGiftFruit):
pass
#多繼承
#mixin設計模式
#水果類
class Fruit:
pass
#南方類
class South:
pass
#北方類
class North:
pass
#禮物類
class Gift:
pass
#非禮物類
class NotGift:
pass
#蘋果類
class Apple(Fruit,North,Gift):
pass
#梨
class Pear(Fruit,North,NotGift):
pass
#桔子
class Orange(Fruit,South,Gift):
pass
#香蕉
class Banana(Fruit,South,NotGift):
pass
Python 類和對象-上