Python物件導向語法筆記
一個簡單的Employee物件示範
__init__用途是定義物件剛建立後,預計初始化的流程
類別內的method和一般python函數定義不同,必須包含參數self,並且務必放在第一個參數位置
在單一個main.py程式定義物件並使用物件
class Employee: empCount = 0 #定義物件剛建立後,預計初始化的流程。 #self就是物件自己本身 def __init__(self, name, salary): self.name = name self.yoursalary = salary Employee.empCount += 1 #和一般python函數定義不同,類別內的method必須包含參數self,並且務必放在第一個參數位置 def displayTotalEmpCount(self): print("Total Employee Count: %d" % self.empCount) def displayEmpInfo(self): print("Name:",self.name,"Salary:",self.yoursalary) emp1 = Employee("Mike", 42000) emp1.displayEmpInfo() emp1.displayTotalEmpCount() emp2 = Employee("Michelle", 50000) emp2.displayEmpInfo() emp1.displayTotalEmpCount() emp2.displayTotalEmpCount()
可以看到empCount會是被各個獨立的物件實體,所共用的屬性。
練習程式2-獨立物件實體成員屬性額外定義與刪除
class Employee: empCount = 0 #定義物件剛建立後,預計初始化的流程。 #self就是物件自己本身 def __init__(self, name, salary): self.name = name self.yoursalary = salary Employee.empCount += 1 #和一般python函數定義不同,類別內的method必須包含參數self,並且務必放在第一個參數位置 def displayTotalEmpCount(self): print("Total Employee Count: %d" % self.empCount) def displayEmpInfo(self): print("Name:",self.name,"Salary:",self.yoursalary) emp1 = Employee("Mike", 42000) emp2 = Employee("Michelle", 50000) #可以自行針對獨立物件去定義物件成員,注意是互相獨立的,不會連動到其他物件實體。 emp1.age=23 print(emp1.age) emp1.age=24 print(emp1.age) #也可透過del 去刪除成員,而因為成員已經不存在所以不能進行打印。 del emp1.age print(emp1.age) #emp1定義的age只有它自己能用,emp2沒法去存取,因為其自身根本不存在此age成員 print(emp2.age)
可以藉由python所提供的針對成員檢查的method做一些防呆
- getattr : 返回物件某成員(屬性、方法)的內容
- hasattr : 檢查物件某成員是否存在,存在返回true,反之則傳回false。
- setattr : 設定物件某成員的內容。若此成員不存在則會建立。
- delattr : 刪除指定成員
練習程式3-物件成員的增、刪、判斷
class Employee: empCount = 0 #定義物件剛建立後,預計初始化的流程。 #self就是物件自己本身 def __init__(self, name, salary): self.name = name self.yoursalary = salary Employee.empCount += 1 #和一般python函數定義不同,類別內的method必須包含參數self,並且務必放在第一個參數位置 def displayTotalEmpCount(self): print("Total Employee Count: %d" % self.empCount) def displayEmpInfo(self): print("Name:",self.name,"Salary:",self.yoursalary) emp1 = Employee("Mike", 42000) emp2 = Employee("Michelle", 50000) #可以自行針對獨立物件去定義物件成員,注意是互相獨立的,不會連動到其他物件實體。 emp1.age=23 print(emp1.age) emp1.age=24 print(emp1.age) #emp1定義的age只有它自己能用,emp2沒法去存取,因為其自身根本不存在此age成員 if hasattr(emp2, "age"): print("age欄位存在") else: print("age欄位不存在") setattr(emp2, "age", 23) print("已補建立emp2的age欄位:"+str(emp2.age)) if hasattr(emp1, "age"): print("age欄位存在,進行刪除") delattr(emp1, "age") print("emp1不存在:"+str(emp1.age)) else: print("age欄位存在,進行刪除") setattr(emp1, "age", 22) print("建立"+str(emp1.age))
關於class內預設的成員
__dict__ : 類別所屬的命名空間字典
__module_ : 類別隸屬的模組,若無引用其他模組,預設就是__main__
__bases__ : 類別的上層父類別
__name__ : 類別名稱
__doc__ : 類別文字字串
留言
張貼留言