https://www.cnblogs.com/evablogs/p/6688938.html
類的定義
在Python中,類通過class關鍵字定義,類名以大寫字母開頭
1
2
|
>>>
class
Person(
object
):
#所有的類都是從object類繼承
pass
#pass先不做任何處理,先跳過,為了防止語法錯誤
|
創建類的屬性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>>
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'
|
實例的創建
創建實例使用 類名+(),類似函數調用的形式創建:
例如:
1
2
3
4
5
6
7
|
>>>
class
Person(
object
):
pass
>>> p1
=
Person()
#創建實例
>>> p1.name
=
'Bart'
#創建實例屬性
>>> p2
=
Person()
>>> p2.name
=
'Adam'
|
初始化實例屬性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>>
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)代表類的私有成員,只有類本身能訪問,其子類對象也不能訪問到這個數據。