類的定義
在Python中,類通過class關鍵字定義,類名以大寫字母開頭
>>>class Person(object): #所有的類都是從object類繼承
pass #pass先不做任何處理,先跳過,為了防止語法錯誤
創建類的屬性
>>> class Person(object):
address = 'Earth' #類的屬性直接在類內部定義,當實例屬性和類屬性重名時,實例屬性優先級高
def __init__(self, name):
self.name = name
>>> Person.address #直接通過類.屬性可以訪問
'Earth'
>>>p1=Person('A')
>>>p1.address #通過創建類的實例,也可以通過實例.屬性訪問
'Earth'
>>> Person.address='KKKK' #類的屬性可以動態修改
>>> Person.address
'KKKK'
>>>p1.address #類的屬性一經修改,所有訪問的屬性值也隨之更改
'KKKK'
實例的創建
創建實例使用 類名+(),類似函數調用的形式創建:
例如:
>>> class Person(object):
pass
>>> p1 = Person() #創建實例
>>> p1.name = 'Bart' #創建實例屬性
>>> p2 = Person()
>>> p2.name = 'Adam'
初始化實例屬性
>>> class Person(object):
class=1 #定義類屬性
def __init__(self, name,age): #__init__(self,屬性1,屬性2....):self代表實例,通過self訪問實例對象的變量和函數
self.name = name
self.__age=age #實例的私有屬性無法從外部訪問,但是,從類的內部是可以訪問的
#定義實例方法
def get_name(self):
return self.__age #實例方法,定義在類內部,可以訪問實例的私有屬性__age
#定義類方法
@classmethod
def how_many(cls): #通過@classmethod標記類方法,類方法的第一個參數為cls,cls.class相當於Person.class
return cls.class #類方法中無法調用任何實例的變量,只能獲得類引用
>>> p1 = Person('Bob',12)
>>> print p1.get_age() #實例方法的調用,self不需要顯式傳入
注意:
下划線和雙下划線的區別:
以單下划線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,那么以“_”開頭的名稱都不會被導入,即不能用“from xxx import *”而導入,除非模塊或包中的“__all__”列表顯式地包含了它們;
以雙下划線開頭的(__foo)代表類的私有成員,只有類本身能訪問,其子類對象也不能訪問到這個數據。
