生活随笔
收集整理的這篇文章主要介紹了
Python类的封装
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
封裝的意義:
第一層意義:創(chuàng)建類和對象時,分別創(chuàng)建兩者的名稱空間。只能通過類名加“.”或者obj.的方式訪問里面的名字;
第二層意義:類中把某些屬性和方法隱藏起來,或者定義為私有,只在類的內部使用,在類的外部無法訪問,或者留下少量的接口(函數(shù))供外部訪問;
接著昨天的類的定義的火車站信息爬蟲代碼進行改進,實現(xiàn)封裝,代碼如下:
import requestsclass Station():def __init__ (self,code,cn,qp,jp):#加入兩個下劃線可將其設為隱藏屬性self.__code=codeself.__cn=cnself.__qp=qpself.__jp=jpdef printinfo(self):print(self.__code,self.__cn,self.__qp,self.__jp)def test(self):#self代表類的實例,表示當前對象的地址 self.__class__ 則指向類print(self)print(self.__class__)def getcode(self,s):if s in [self.__cn,self.__qp,self.__jp]:return self.__codedef __str__(self):return "\t".join([self.__code, self.__cn, self.__qp, self.__jp])def getstations(address):while 1:find_address=input("%s站:"%address)address_list=list(filter(lambda i:i.getcode(find_address),stations))if len(address_list)==1:return address_list[0]elif len(address_list)>1:for i in range(len(address_list)):print(i+1,address_list[i])select_address = int(input("輸入選擇的序號:"))return address_list[select_address-1]else:print("查詢地址不存在,重新輸入!")url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9077"
html_txt=requests.get(url).text
#split后可以直接存入列表
infos=html_txt[:-2].split('@')[1:]
#print(infos)
stations=[]for info in infos:station_list = info.split('|')stations.append(Station(station_list[2],station_list[1],station_list[3],station_list[4]))for i in stations[:10]:i.printinfo()i.test()cf_station=getstations("出發(fā)")
dd_station=getstations("到達")
print(cf_station,dd_station)
在這里,我們對類中的屬性前面加入兩個下劃線將其設為隱藏屬性;
此時,便不可以使用obj.的屬性進行訪問;
同時,在寫這段代碼時學習到了列表生成器的使用,具體使用方法的代碼如下:
address_list=list(filter(lambda i:i.getcode(find_address),stations))
實現(xiàn)的效果如下圖:
enen~~ 就醬紫!
總結
以上是生活随笔為你收集整理的Python类的封装的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。