標籤:
1.類的定義方式
class ClassName(object): #object 表示繼承的類,預設為object pass
類的使用類似函數的調用,也可以認為是調用了一次模板來建立一個執行個體。
2.建立對象的屬性和方法
不同於java等語言的定義,python是動態語言,因此可以給同一個類的不同執行個體動態地增加不同的屬性。
xiaoming = Person()xiaoming.name = "xiaoming" #賦值的時候建立一個執行個體的屬性xiaoming.gender = "male"xiaohong = Person()xiaohong.school = "sichuan university" #和xiaoming的屬性可以不同xiaohong.sex = "female"
在Python的中方法也可以動態地增加到執行個體對象中,需要用到 types.MethodType() ,這種情況在通常情況下不多見!一般還是定義在類中。
import typesdef fn_get_grade(self): if(self.score >= 80): return ‘A‘ elif(self.score >= 60): return ‘B‘ else: return ‘C‘class Person(object): def __init__(self,name,score): self.name = name self.score = scorep1 = Person(‘Bob‘,90)#動態為p1Binder 方法p1.get_grade = types.MethodType(fn_get_grade,p1,Person)print p1.get_grade() #會輸出A,方法動態綁定到p1對象上了p2 = Person(‘Alice‘,65)print p2.get_grade() #Error,p2沒有這個方法
3.初始化執行個體屬性
def __init__(self,attr1,attr2): #在建立執行個體是被自動調用 self.attr1_name = attr1 self.attr2_name = attr2
4.訪問限制
以雙底線開頭,且不以雙底線結尾的屬性名稱,無法被外界訪問
5.建立類屬性和方法
為類所有,沒有用self.attr 的方式來綁定到對象的屬性,它在類的方法中要通過 類名.類屬性名稱 如: Person.cout 來訪問。千萬不要在執行個體上修改類屬性,它實際上並沒有修改類屬性,而是給執行個體綁定了一個執行個體屬性。
class Person(object): count = 0 #定義類屬性 @classmethod #標記類方法 def how_many(cls): #cls表示類本身,作用相當於self return cls.count def __init__(self,name): self.name = name Person.count = Person.count + 1 #沒有cls,需要用類名來訪問類屬性print Person.how_many()p1 = Person(‘Bob‘)print Person.how_many()
python 中物件導向編程簡單總結1