linux 封装python,基于linux下python学习(封装)
一、面向?qū)ο?/p>
類的設(shè)計(jì):在程序開發(fā)中,要設(shè)計(jì)一個(gè)類,通常需要滿足以下三個(gè)要求:
1、類名? 這類事物的名字,滿足大駝峰命名法
2、屬性 這類事物具有什么樣的特征
3、 方法? 這類事物具有什么樣的行為
eg:小明今年18歲,身高1.75,每天早上要跑步,會(huì)去吃東西
類名:Person()? 屬性:name,age,height??? 方法:run() eat()
(1)
# 小貓愛吃魚,小貓要喝水
class? Cat():
def eat(self):
print '小貓愛吃魚'
def? drink(self):
print '小貓要喝水'
tom = Cat()???? # 創(chuàng)建貓對(duì)象
tom.eat()
tom.drink()
# 小狗愛睡覺,小狗愛吃肉
class? Dog():
def sleep(self):
print '小狗愛睡覺'
def eat(self):
print '小狗愛吃肉'
xiaoxiao = Dog()
xiaoxiao.sleep()
xiaoxiao.eat()
(2)
class? Dog():
def sleep(self):
print '小狗愛睡覺'
def eat(self):
print '小狗愛吃肉'
xiaoxiao = Dog()
xiaoxiao.name = 'xiaoxiao'
xiaoxiao.sleep()
xiaoxiao.eat()
print xiaoxiao
# addr = id(xiaoxiao)
# print '%x' %addr
# print '%d' %addr
#再創(chuàng)建一個(gè)狗對(duì)象
benben = Dog()
benben.name = 'benben'
benben.eat()
benben.sleep()
print? benben
(3)
初始化方法
我們已經(jīng)知道了使用類名() 就可以創(chuàng)建一個(gè)對(duì)象
當(dāng)使用類名()創(chuàng)建對(duì)象時(shí),python的解釋器會(huì)自動(dòng)執(zhí)行以下操作:
1、為對(duì)象在內(nèi)存中分配空間 --創(chuàng)建對(duì)象
2、調(diào)用初始化方法為對(duì)象的屬性設(shè)置初始值?? 初始化方法(__init__)這個(gè)初始化方法就是__init__方法,是對(duì)象的內(nèi)置方法
專門是用來定義一個(gè)類具有那些屬性的方法
class? Dog():
def? __init__(self,new_name):
self.name = new_name
def sleep(self):
print '%s 愛睡覺'? % self.name
xiaoxiao = Dog('xiaoxiao')?? # 使用類名()創(chuàng)建對(duì)象的時(shí)候,會(huì)自動(dòng)調(diào)用初始化方法__init__
print xiaoxiao.name
xiaoxiao.sleep()
benben = Dog('benben')
benben.sleep()
二、內(nèi)置方法
(1)__del__
1、在python中
當(dāng)使用類名()創(chuàng)建對(duì)象時(shí),為對(duì)象分配萬空間后,自動(dòng)調(diào)用__init__
當(dāng)一個(gè)對(duì)象被從內(nèi)存中銷毀前,會(huì)自動(dòng)調(diào)用__del__方法
"""
class Dog():
def __init__(self,new_name):
self.name = new_name
print '%s 來了' %self.name
def __del__(self):
print '%s 走了' %self.name
xiaoxiao = Dog('xiaoxiao')
print xiaoxiao.name
print '_' * 50
2、
class Dog():
def __init__(self,new_name):
self.name = new_name
print '%s 來了' %self.name
def __del__(self):
print '%s 走了' %self.name
xiaoxiao = Dog('xiaoxiao')
print xiaoxiao.name
del xiaoxiao
print '_' * 50
(2)__str__
1、在python中,使用python輸出對(duì)象變量
默認(rèn)情況下,會(huì)輸出這個(gè)變量引用的對(duì)象是由哪一個(gè)類創(chuàng)建的對(duì)象
以及在內(nèi)存中的地址(十六進(jìn)制表示)
如果在開發(fā)中,希望使用print輸出對(duì)象變量時(shí)
能夠打印自定義的內(nèi)容,就可以利用__str__這個(gè)內(nèi)置方法了
"""
class Dog():
def __init__(self,name):
self.name = name
tom = Dog('tom')
print tom
2、
class Dog():
def __init__(self,name):
self.name = name
def __str__(self): #必須返回一個(gè)字符串
return '我是%s' %self.name
tom = Dog('tom')
print tom
三、封裝
1、封裝是面向?qū)ο缶幊痰囊淮筇攸c(diǎn)
2、面向?qū)ο缶幊痰牡谝徊?#xff0c;將屬性和方法封裝到一個(gè)抽象的類中
3、外界使用類創(chuàng)建對(duì)象,然后讓對(duì)象調(diào)用方法
4、對(duì)象方法的細(xì)節(jié)都被封裝在類的內(nèi)部
(1)
需求:
1、tom和xiaoxiao都愛吃東西愛跑步
2、tom體重75
3、xiaoxiao體重50
4、每次跑步都會(huì)減少0.5公斤
5、每次吃東西都會(huì)增加1公斤
"""
class person():
def __init__(self, name,weight):
self.name = name
self.weight =weight
def __str__(self):
return '我的名字叫%s,體重是%.2f' %(self.name,self.weight)
def? run(self):
print '%s 愛跑步' % self.name
self.weight -= 0.5??? # 在對(duì)象的方法內(nèi)部,是可以直接訪問對(duì)象的屬性
def? eat(self):
print '%s 愛吃' % self.name
self.weight += 1.0
tom = person('tom',75.0)
tom.run()
tom.eat()
print tom
xiaoxiao = person('xiaoxiao',50.0)
xiaoxiao.run()
xiaoxiao.eat()
print xiaoxiao
(2)
需求:
1、房子有戶型,總面積和家具名稱列表
新房子沒有任何的家具
2、家具有名字和占地面積,其中
床:占4平方
衣柜:占2平方
餐桌:占1.5平方
3、將以上三件家具添加到房子中
4、打印房子時(shí),要求輸出:戶型,總面積,剩余面積,家具名稱列表
"""
class? HouseItem():
def __init__(self, name,square):
self.name = name
self.square = square
def __str__(self): #必須返回一個(gè)字符串
return '%s的占地面積為%.2f' %(self.name,self.square)
chuang= HouseItem ('chuang',4)
print chuang
yigui = HouseItem('yigui',2)
print yigui
canzhuo =HouseItem('canzhuo',1.5)
class? House():
def __init__(self,huxing,square):
self.huxing = huxing
self.square = square
self.free_square = square?? # 剩余面積
self.item_list = []???????? # 家具名稱列表
def __str__(self):
return '戶型:%s\n總面積:%.2f\n剩余面積:%.2f\n家具列表:%s' % (self.huxing,self.square,self.free_square,self.item_list)
def? add_item(self,item):
print '要添加的家具%s' % item
if item.square > self.free_square:
print '%s面積太大無法添加' %item.square
return
self.item_list.append(item.name)
self.free_square -=item.square
my_home = House('兩室一廳',180)? # 創(chuàng)建房子
# 添加家具
my_home.add_item(chuang)
my_home.add_item(yigui)
my_home.add_item(canzhuo)
print my_home
(3)
1、士兵瑞恩有一把AK47
2、士兵可以開火
3、槍能夠發(fā)射子彈
4、槍能夠裝填子彈(增加子彈的數(shù)量)
class? Gun():
def __init__(self,model):
self.model = model? #? 槍的型號(hào)
self.bullet_count = 0?? #子彈的數(shù)量
def? add_bullet(self,count):
self.bullet_count += count
def shoot(self):
if self.bullet_count <= 0:? #? 判斷子彈的數(shù)量
print '沒有子彈了'
self.bullet_count -= 1?? #發(fā)射子彈
print '%s 突突突 %d' %(self.model,self.bullet_count)
class? Soldier():
def? __init__(self,name):
self.name = name
self.gun = None
def fire(self):
if self.gun == None:
print? '%s沒有槍' %self.name
return
print 'go!!!'
self.gun.add_bullet(50)
self.gun.shoot()
ak47 = Gun('ak47')
ak47.add_bullet(50)
ak47.shoot()
ryan = Soldier('Ryan')
ryan.gun = ak47
ryan.fire()
print? ryan.gun
總結(jié)
以上是生活随笔為你收集整理的linux 封装python,基于linux下python学习(封装)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jwt, json web token
- 下一篇: 手机组态软件 APP监控台达PLC C#