Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Getter và Setter trong Python


Đóng gói dữ liệu: getter truy cập thuộc tính private, setter thay đổi giá trị. Python dùng underscore đơn (_) hoặc kép (__) để chỉ private.

Truy cập thuộc tính private

Tạo class, khởi tạo, truy cập trực tiếp thuộc tính _year.

Ví dụ

class year_graduated: 
    def __init__(self, year=0): 
        self._year = year 
grad_obj = year_graduated() 
print(grad_obj) 
print(grad_obj.year)

Đầu ra

<__main__.year_graduated object at 0x00F2DD50> 
0

Dùng getter và setter

Định nghĩa get_year(), set_year().

Ví dụ

class year_graduated: 
    def __init__(self, year=0): 
        self._year = year 
    def get_year(self): 
        return self._year 
    def set_year(self, a): 
        self._year = a 
grad_obj = year_graduated() 
print(grad_obj.get_year()) 
grad_obj.set_year(2019) 
print(grad_obj._year)

Đầu ra

0 
2019

Làm thuộc tính thực sự private (__)

Prefix __year, truy cập qua getter/setter. Python name mangling.

Ví dụ

class year_graduated: 
    def __init__(self, year=32): 
        self._year = year 
    def get_year(self): 
        return self.__year 
    def set_year(self, a): 
        self.__year = a 
grad_obj = year_graduated() 
print(grad_obj._year) 
print(grad_obj.get_year()) 
grad_obj.set_year(2019) 
print(grad_obj._year)

Đầu ra

32 
AttributeError: 'year_graduated' object has no attribute '_year_graduated__year'

Dùng property decorator

@property cho getter, @name.setter cho setter, truy cập như thuộc tính.

Ví dụ

class year_graduated: 
    def __init__(self, year=32): 
        self._year = year 
    @property 
    def Aboutyear(self): 
        return self.__year 
    @Aboutyear.setter 
    def Aboutyear(self, a): 
        self.__year = a 
grad_obj = year_graduated() 
print(grad_obj._year) 
grad_obj.year = 2018 
print(grad_obj.year)

Đầu ra

32 
2018