1.面向對象及面向過程
1)面向過程:核心過程二字,過程即解決問題的步驟,就是先干什么后干什么
基于該思想寫程序就好比在這是一條流水線,是一種機械式的思維方式
優點:復雜的過程流程化
缺點:擴展性差
2)面向對象:核心是對象二字,對象指特征與技能的結合體
基于該思想編寫程序就好比在創造一個世界,世界是由一個個對象組成,是一種‘上帝式’的思維方式
優點:可擴展性強
缺點:變成復雜度高,極容易出現過度設計的問題
?
3)類:對象是特征與技能的結合體,類就是一系列對象相似的特征與技能的結合體
在現實生活中:一定是先有一個個具體的對象,后總結出類
在程序中:一定是先定義類,后產生對象
?
2.駝峰式命名法
class Students:
??? school = '薪享宏福'
??? def __init__(self,name, age):#初始化函數(區分不同對象的函數)
??????? self.name = name
??????? self.age = age
??????? #代表誰調用self,self就是誰
??????? #stu1.name = name
??????? #stu1.age = age
??? def run(self):
??????? print('%s is running......' % self.name)
??? def __str__(self):
??????? # 當打印實例化出來的對象的時候,會打印出__str__返回的值
??????? return '實例化? %s' % self.name
面向對象接口。?
stu1 = Students('li',88)
print(stu1.name)
print(stu1.age)
stu1.run()
print(stu1)
?
stu2 = Students('zhao',77)
print(stu2.name)
print(stu2.age)
stu1.run()
print(stu2)
?
輸出結果:
li
88
li is running......
實例化? li
zhao
77
li is running......
實例化? zhao
3.封裝實例
1)小明愛跑步
需求:
1.小明體重75公斤
Python os模塊?2.小明每次跑步都會減肥0.5公斤
3.小明每次吃東西體重會增加1公斤
?
class Human(object):
??? def __init__(self,name,weight):
??????? self.name = name
??????? self.weight = weight
??? def run(self):
??????? self.weight -= 0.5
??? def eat(self):
??????? self.weight += 1
?
??? def __str__(self):
??????? return '%s的體重為%skg' % (self.name,self.weight)
?
xiaoming = Human('小明',75)
xiaoming.eat()
xiaoming.eat()
xiaoming.run()
xiaoming.run()
xiaoming.run()
xiaoming.run()
xiaoming.run()
xiaoming.run()
xiaoming.run()
print(xiaoming)
輸出結果:
小明的體重為73.5kg
?
python3 socket。2)封裝案例2
需求:
1、房子有戶型、總面積、家具名稱列表
房子沒有任何家具
2、家具有名字和占地面積,其中
席夢思(bed):4平米
os模塊的方法用來返回、 衣柜(chest): 2平米
餐桌(table): 1.5平米
3、將以上3個家具添加到房子中
4、打印房子中,要求輸出:戶型、總面積、剩余面積、家具名稱列表
?class Item(object):
??? def __init__(self,name,area):
??????? self.name = name
??????? self.area = area
class House(object):
??? def __init__(self,name,total_area):
??????? self.name = name
??????? self.total_area = total_area
??????? self.free_area = total_area
??????? self.item = []
??? def add_item(self,item):
??????? self.free_area -= item.area
??????? self.item.append(item.name)
??? def __str__(self):
??????? return '戶型:%s? 房子總大小:%s? 剩余面積:%s? 家具列表:%s? ' % (self.name,self.total_area,self.free_area,self.item)
?
bed = Item('床',4)
table = Item('桌子',1.5)
chest = Item('衣柜',2)
house = House('公寓',18)
house.add_item(bed)
house.add_item(table)
house.add_item(chest)
print(house)
輸出結果:
戶型:公寓? 房子總大小:18? 剩余面積:10.5? 家具列表:['床', '桌子', '衣柜']
?
socket、3)士兵突擊
需求:
1.士兵許三多有一把AK47
2.士兵可以開火
3.槍能夠發射子彈
4.槍裝填子彈——增加子彈數量
python常用模塊、?
class Gun(object):
??? def __init__(self,model,bullet):
??????? self.model = model
??????? self.bullet = bullet
??? def add_bullet(self,buller_num):
??????? self.bullet += buller_num
??????? print('裝填完畢')
??????? if self.bullet >= 30:
??????????? self.bullet = 30
??? def shoot(self):
??????? self.bullet -= 1
??????? if self.bullet <= 0:
??????????? print('槍內無子彈,請裝彈')
??????????? self.bullet = 0
??? def __str__(self):
??????? return '%s內還有%s發子彈' % (self.model,self.bullet)
?
class Human(object):
??? def __init__(self,name,gun):
??????? self.name = name
??????? self.gun = gun
??? def fire(self):
??????? self.gun.shoot()
?
?
Ak47 = Gun('Ak47',5)
xusanduo = Human('許三多',Ak47)
xusanduo.fire()
xusanduo.fire()
xusanduo.fire()
xusanduo.fire()
Ak47.add_bullet(30)
print(Ak47)
?
4.繼承
繼承實現代碼的重用,相同的代碼不需要重復編寫,子類可以繼承父類的屬性和方法
os、單繼承,多繼承
class Anamal:
??? def eat(self):
??????? print('吃')
??? def drink(self):
??????? print('喝')
??? def run(self):
??????? print('跑')
??? def sleep(self):
??????? print('睡')
class Dog(Anamal):
??? def bark(self):
??????? print('汪汪叫')
?
class XiaoTianQuan(Dog):
??? def fly(self):
??????? print('我會飛啦!!!!')
dog = XiaoTianQuan()
dog.eat()
dog.run()
dog.sleep()
dog.drink()
dog.bark()
dog.fly()
?
5.方法的重寫與擴展
1)重寫:
子類繼承父類,可以享受父類中已經封裝號的方法,不需要再次開發
當父類的方法不滿足子類需求時,可以對方法進行重寫
2)擴展:
在子類中重寫父類的方法
在需要的位置使用super().父類方法來調用父類方法的執行
?
6.多態
python中的socket模塊。不同的子類對象調用相同的父類方法時,產生不同的結果
多態可以增加代碼的靈活度
class Animal(object):
??? def __init__(self,name):
??????? self.name = name
??? def eat(self):
??????? print('吃.....')
??? def drink(self):
??????? print('喝.....')
??? def run(self):
??????? print('跑.....')
??? def sleep(self):
??????? print('睡.....')
??? def play(self):
??????? pass
?
class Dog(Animal):
??? def play(self):
??????? print('%s開開心心去玩耍......' % self.name)
?
class XiaoTianQuan(Animal):
??? def play(self):
??????? print('%s飛到天上去玩耍.....' % self.name)
?
?
class Person(object):
??? def __init__(self,name):
??????? self.name = name
python telnet模塊、?
??? def with_game(self, part):
??????? print('%s 與 %s 一起去玩耍.....' % (self.name,part.name))
??????? part.play()
?
dog = Dog('旺財')
xiaotianquan = XiaoTianQuan('飛天旺財')
xiaoming = Person('小明')
xiaoming.with_game(xiaotianquan)
?
7.異常處理
1)什么是異常?
異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。
一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。
當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
?
2)異常處理:
捕捉異常可以使用try/except語句。
try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息并處理。
如果你不想在異常發生時結束你的程序,只需在try里捕獲它。
try:
??? 正常的操作
?? ......................
except:
??? 發生異常,執行這塊代碼
?? ......................
else:
??? 如果沒有異常執行這塊代碼
UR5socket模塊??
try:
<語句>
finally:
<語句>??? #退出try時總會執行
raise
?
try:
??? fh = open("testfile", "w")
??? fh.write("這是一個測試文件,用于測試異常!!")
finally:
??? print("Error: 沒有找到文件或讀取文件失敗")
?
3)用戶自定義異常
class O_ERROR(Exception):
??? def __init__(self, info):
??????? self.info = info
?
def ad(age):
??? if age == 100:
??????? raise O_ERROR('年紀不能等于100')
?
try:
??? ad(100)
except O_ERROR as e:
??? print(e)
輸出結果:
年紀不能等于100
python之OS模塊詳解、?
8.os模塊
os.getcwd() 獲取當前工作路徑
os.chdir() 改變當前工作路徑
os.makedirs() 創建遞歸目錄
os.mkdir()創建單級目錄
os.rmdir() 刪除空目錄
os.listdir() 列出指定目錄下的文件和文件夾,包括隱藏文件,以列表方式打印出來
os.remove()刪除文件或文件夾
os.rename()重命名
os.stat()查看一個文件的詳細信息
os.path.exits()判斷路徑是否存在
os.path.isfile()判斷文件是否存在
os.path.isdir()判斷文件夾是否存在
os.path.join()路徑拼接
?
9.socket模塊
檢查主機、端口是否正常工作
import socket
hosts = ['192.168.254.10:22','192.168.100.100:3306','192.168.200.200:25']
server = socket.socket()#tcp協議
server.settimeout(1)
for host in hosts:
??? ip = host.split(':')[0]
??? port = host.split(':')[1]
??? status_code = server.connect_ex((ip,int(port)))
??? # print('%s:%s is %s' % (ip,port,status_code))
??? if status_code != 0:
??????? pass
?