標籤:port ict 物件導向編程 from 無法 span 賦值 優先 bsp
包:檔案夾,可以有多級
模組:py檔案
在python中,為避免不同模組重名,可以將同名模組放入不同包中。
1.如何區分包和普通目錄:
在每個包裡都必須有一個__init__.py的檔案,即便是空檔案
2.舊版本中新版本代碼的使用:
from __future__ import xxx
執行個體屬性
由於Python是動態語言,對每一個執行個體,都可以直接給他們的屬性賦值,執行個體的屬性可以像普通變數一樣進行操作
1.初始化執行個體屬性
__init__(self,xxx,…)
class Person(object): def __init__(self,name,gender,birth): #初始化執行個體屬性 self.name=name self.gender=gender self.birth=birthxiaoming = Person(‘Xiao Ming‘, ‘Male‘, ‘1990-1-1‘, job=‘Student‘)print (xiaoming.name)print (xiaoming.job)
2.任意關鍵字參數
接受任意關鍵字參數:**kw
初始化:self.__dict__.update(kw)
3.訪問限制
如果一個屬性由雙底線開頭,該屬性就無法被外部存取
4.執行個體方法
即類中定義的函數,第一個參數為self。
執行個體方法其實也是屬性,它實際上是一個函數對象。比如說p1.get_grade 返回的是一個函數對象,但這個函數是一個綁定到執行個體的函數,p1.get_grade() 才是方法調用。
在執行個體方法內部,可以訪問所有執行個體屬性,這樣,如果外部需要訪問私人屬性,可以通過方法調用獲得,這種資料封裝的形式除了能保護內部資料一致性外,還可以簡化外部調用的難度。
# -*- coding:utf-8 -*-class Person(object): def __init__(self, name, score): self.name=name self.__score=score def get_grade(self): #執行個體方法,即函數 if self.__score>=90: return ‘A-優秀‘ elif self.__score>=60: return ‘B-及格‘ else: return ‘C-不及格‘p1 = Person(‘Bob‘, 90)print (p1.get_grade)#返回函數對象print (p1.get_grade())#方法調用
類屬性
如果在類上綁定一個屬性,則所有執行個體都可以訪問類的屬性,並且,所有執行個體訪問的類屬性都是同一個
1.類屬性和執行個體屬性名稱字衝突
當執行個體屬性和類屬性重名時,執行個體屬性優先順序高,它將屏蔽掉對類屬性的訪問。
2.類方法
通過標記一個 @classmethod,該方法將綁定到 Person 類上,而非類的執行個體。
因為是在類上調用,而非執行個體上調用,因此類方法無法獲得任何執行個體變數,只能獲得類的引用。
class Person(object): __count = 0 @classmethod #將方法綁定到類上 def how_many(cls): return cls.__count #類方法的第一個參數將傳入類本身,通常將參數名命名為 cls,上面的 cls.__count 實際上相當於 Person.__count。 def __init__(self,name): self.name=name Person.__count+=1print (Person.how_many())#本來私人屬性是不允許外部存取的,但可以通過類方法訪問p1 = Person(‘Bob‘)print (Person.how_many())
python-物件導向編程