Python __init__
初始化函式中在屬性名前面加2條下劃線的形式表示把當前屬性設定為私有例項屬性後,在外部(指建立當前類的例項物件)如何進行訪問並更新該屬性值?
- 首先建立一個 Person類,在類中透過 設定2個例項函式去訪問和修改私有屬性
class Person:
def __init__(self):
self.__age = 18 # 定義一個私有化屬性
def get_age(self): # 訪問私有屬性
return self.__age
def set_age(self, age): # 修改私有屬性
if age <= 0:
print('年齡不能小於0')
else:
self.__age = age
外部進行對 Person 物件例項化,透過 p 去呼叫到 get_age 或 set_age 例項方法來獲取或修改私有屬性值
p = Person()
print(p.get_age) #訪問私有屬性
p.set_age(20) #修改私有屬性
但以上的做法,是要在 Person 類中透過定義例項方法,並且要去呼叫例項方法才能對私有屬性進行訪問或修改。那麼我們還有沒有其他方式?不用去呼叫例項方法,而是透過 例項物件 .出來私有屬性(同公共屬性的訪問一樣)去對私有屬性進行訪問和修改呢?那就是下面介紹的 property 屬性函式了
- 使用 property 屬性函式實現方式,示例如下:
建立一個 Person類,並把 age 設定成私有屬性。透過使用 property 函式,實現外部直接透過訪問屬性的形式去訪問到私有屬性
class Person:
def __init__(self):
self.__age = 18 # 定義一個私有化屬性
def get_age(self): # 訪問私有屬性
return self.__age
def set_age(self, age): # 修改私有屬性
if age <= 0:
print('年齡不能小於0')
else:
self.__age = age
# 定義一個類屬性,實現透過直接訪問屬性的形式去訪問私有屬性
age = property(get_age,set_age)
外部進行對 Person 物件例項化呼叫
p = Person()
print(p.age)
p.age=20
- 使用 property裝飾器 的現實方式,示例如下:
class Person:
def __init__(self):
self.__age = 18 # 定義一個私有化屬性
@property # 使用裝飾器對age進行裝飾,提供一個getter方法
def age(self): # 訪問私有屬性
return self.__age
@age.setter # 使用裝飾器對age進行裝飾,提供一個setter方法
def age(self, age): # 修改私有屬性
if age <= 0:
print('年齡不能小於0')
else:
self.__age = age
外部進行對 Person 物件例項化呼叫
p = Person()
print(p.age)
p.age=20