Python物件導向編程(四)

來源:互聯網
上載者:User

標籤:lis   ash   物件導向   資料類型   init   self   _id   內建函數   user   

1.多態

多態的概念雖然現在才說,但是我們一直在用。多態就是多種形態的意思,動物都貓,狗,豬等等,這些都是動物的多種形態。

反映在Python中,多態就意味著就算不知道變數所引用的物件類型是什麼,也能對它進行操作。比如序列類型有計算長度的方法len(),那我們拿到一個序列類型x,我們不需要知道x是什麼類型,只需要知道它是序列類型,那我們就可以用len(x)的方法計算x的長度。這就是多態性

當然我們學過一個內建函數isinstance(),可以用它來判斷資料類型,但是這可不符合多態優美的特性

2.Binder 方法與非Binder 方法

類裡面定義的函數有兩種,Binder 方法和非Binder 方法

1)Binder 方法

Binder 方法又分為綁定給類的方法和綁定給對象用的方法。

凡是定義在類中,且沒有被任何裝飾器修飾的方法,都是綁定給對象用的方法。

  特點是obj.func()會自動把obj當作第一個參數傳入,因為func的邏輯就是要處理obj
在類中定義的被classmethod裝飾器修飾的方法,就是綁定給類的方法

  特點是cls.func()會自動把類cls當作第一個參數傳入,因為func的邏輯是處理cls,就算是對象調用這個函數,也是把類當成第一個參數傳入

class People:    def __init__(self,name):        self.name=name    def bar(self):        print(‘----->‘,self.name)    @classmethod    def func(cls):        print(cls)p1=People(‘zhang‘)p1.func()   #<class ‘__main__.People‘>People.func()#<class ‘__main__.People‘>

2)非Binder 方法

還有一種方法是既不綁定給類,也不綁定給對象的,叫做非Binder 方法

用staticmethod裝飾器裝飾

#檔案名稱:pickle_testimport hashlibimport timeimport pickleimport osstudent_path=r‘C:\Users\Administrator\PycharmProjects\python5期\day22\student‘class People:    def __init__(self,name,sex,user_id):        self.name=name        self.sex=sex        self.user_id=user_id        self.id = self.create_id()    def tell_info(self):        print(‘‘‘        --------%s info--------        id:%s        name:%s        sex:%s        user_id:%s        ‘‘‘ %(self.name,self.id,self.name,self.sex,self.user_id))    def create_id(self):        m=hashlib.md5()        m.update(self.name.encode(‘utf-8‘))        m.update(self.sex.encode(‘utf-8‘))        m.update(str(self.user_id).encode(‘utf-8‘))        return m.hexdigest()    def save(self):        with open(self.id,‘wb‘) as f:            pickle.dump(self,f)    @staticmethod #非Binder 方法,就是一個函數,就是一個工具而已,不需要類,也不需對象    def get_all():        res = os.listdir(student_path)        for item in res:            file_path=r‘%s\%s‘ %(student_path,item)            with open(file_path,‘rb‘) as f:                obj=pickle.load(f)                obj.tell_info()#還原序列化.pyfrom pickle_test import Peoplep=People(‘egon‘,‘male‘,123123123)p.get_all()

3.軟體開發規範

在真正的軟體開發過程中,並不是把所有代碼寫在一個檔案中的,可以想象一下,一個小程式大概有10000行代碼,都寫在一個檔案中的話,你還幹這行嗎?

正確的方式應該是把程式拆成一個一個模組。比如常用的bin目錄放可執行檔,conf目錄放設定檔

db目錄放資料,log目錄放記錄檔,lib目錄放庫,src目錄放一些重要的代碼,比如重要的邏輯,類的定義等

 

Python物件導向編程(四)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.