2020年3月22日 星期日

[Python]Python3 OO 物件導向程式設計

前置知識
第一部分 : __main__ 
def main():
    程式內文

if __name__ == '__main__':
           main():

良葛格Python 的簡介模組介紹與應用中,提到會這樣用是因為  以物件導向來講每一個.py檔都是一個模組,模組撰寫可能來自不同的作者,個別的模組需要自我測試

我們可以所有程式共用一個程式進入點,這樣的python會像腳本語言 由上往下跑
呼叫別的模組的function再繼續往下一條做

每個module 都需要寫個main去做單體測試 這樣才能確保 別的函示呼叫 我們能夠運算並傳送正確的結果。

第二部分 : __init__ 
告訴python某個目錄是套件
Class的初始化函式是由兩條底線包含著init做宣告。



# encoding: utf-8

class Student:  
    def __init__(self, name, grade, age):  
        self.name = name  
        self.grade = grade  
        self.age = age  
    def set_name(self, name):  
        self.name = name  

student_objects=[]
student_objects.append( Student('john', 'B', 15) )
student_objects.append( Student('dave', 'A', 12) )
student_objects.append( Student('jane', 'A', 10) )
student_objects[0].set_name('John')

for i in student_objects:
    print i.name,i.grade,i.age 

Output:
John B 15
dave A 12
jane A 10
另外一個範例
class Demo: def __init__(self,i): self.i = 9527 def hello(self): print("hello", self.i) a = Demo(6789) a.hello()


說明 : 第一步我們會宣告一個Class 而每個class內部都會有一個隱含宣告函式__init__
我們在隱含宣告函式中 去命名一個變數i 的數值為9527

另外我們額外宣告一個hello的自訂函式 把整個Class的主體中的i傳進去
因為是同個class 我們可以把self視為一般OOP的this
接著我們跳出Class的框架 new一個Demo的物件 為a並把6789傳進去
然後因為a複製Demo所以a也有個hello可以用  若無特別override改寫 其動作跟原始的是一樣的
接著就只是把6789傳進去而已,最後還是會是9527 是因為在__init__的內容已經特別去設定他的值了。

第三部分 : __str__ 

第四部分 : __del__


第五部分 : __all__

===========================================

Ch1
OO的起源 練習畫UML與關聯圖

Ch2
最簡單的class
class class_name :
pass

def _func(self, id):
前綴底線表示此方法僅供內部使用

Ch3
Python繼承實作

class a()
def aaa()
     print("a")

class b(a)  //視為classb繼承class a
def aaa()
     print("b")

super.aaa()


>>> a





沒有留言:

張貼留言