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__ : 類別文字字串




留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

外貿Payment Term 付款條件(方式)常見的英文縮寫與定義

鼎新ERP_會計系統_總帳管理_財務參數設定_傳票處理