Python 訪問和設定私有屬性

build2024發表於2024-06-30

Python __init__ 初始化函式中在屬性名前面加2條下劃線的形式表示把當前屬性設定為私有例項屬性後,在外部(指建立當前類的例項物件)如何進行訪問並更新該屬性值?

  1. 首先建立一個 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_ageset_age 例項方法來獲取或修改私有屬性值

p = Person()
print(p.get_age) #訪問私有屬性
p.set_age(20) #修改私有屬性

但以上的做法,是要在 Person 類中透過定義例項方法,並且要去呼叫例項方法才能對私有屬性進行訪問或修改。那麼我們還有沒有其他方式?不用去呼叫例項方法,而是透過 例項物件 .出來私有屬性(同公共屬性的訪問一樣)去對私有屬性進行訪問和修改呢?那就是下面介紹的 property 屬性函式了


  1. 使用 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

  1. 使用 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

相關文章