python-面向對象-15-property裝飾器/get和set方法

1.@property裝飾器

@property能夠將一個方法的調用方式變成"屬性調用"。下面是一個簡單的示例,讓你們體會一下這種轉變。
示例代碼:python

class Employee:

    @property
    def salary(self):
        return 30000

emp1 = Employee()
print(emp1.salary)
print(type(emp1.salary))
emp1.salary()

運行結果:git

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    emp1.salary()
TypeError: 'int' object is not callable
30000
<class 'int'>

代碼說明:github

  1. 首先實例方法salaly使用裝飾@property修飾,從普通實例方法轉變成經過"實例屬性"調用的特殊實例方法。使用print(emp1.salary),本質是調用對象emp1的salary實例方法,返回值30000,因此第一個打印30000.
  2. 30000是int類型的數值,因此使用type函數,顯示<class 'int'>
  3. 使用普通的調用方式去調用裝飾器@property修飾的方法,結果報錯,說明:實例方法一旦使用裝飾器@property修飾,就不能再使用對象名.實例方法名([形參列表])的方式調用。

2.get和set方法

2.1 普通意義上的get和set方法

示例代碼:markdown

class Employee:

    def __init__(self, name, salary):
        self.__name = name
        self.__salary = salary

    def get_salary(self):
        return self.__salary

    def set_salary(self, salary):
        if 1000 < salary < 50000:
            self.__salary = salary
        else:
            print("錄入錯誤!薪水在1000~50000這個範圍")


emp1 = Employee("聶發俊", 2000)
print(emp1.get_salary())
emp1.set_salary(3000)
print(emp1.get_salary())

運行結果:ide

2000
3000

代碼說明:函數

  1. 由於在實例化對象的時候,設置的salary值爲2000,因此打印的時候也是2000.
  2. 首先對salary屬性設置值3000,由於值範圍在(1000, 50000)之間,因此能夠正常設置,因此打印的時候,也是3000。

2.2 使用裝飾器實現get和set方法

示例代碼:code

class Employee:

    def __init__(self, name, salary):
        self.name = name
        self.__salary = salary


    @property
    def salary(self):
        return self.__salary

    @salary.setter
    def salary(self, salary):
        if 1000 < salary < 50000:
            self.__salary = salary
        else:
            print("錄入錯誤!薪水在1000~50000這個範圍")


emp1 = Employee("聶發俊", 2000)
print(emp1.salary)
emp1.salary = 3000
print(emp1.salary)

運行結果:視頻

2000
3000

程序說明:對象

  1. 這個例子和上個例子是功能相同的代碼,只是採用的寫法不一致而已。@property表明獲取屬性,@salary.setter表明設置屬性,分別對應get_salaryset_salary方法。

備註:
更多精彩博客,請訪問: 聶發俊的技術博客
對應視頻教程,請訪問: python400
完整markdown筆記,請訪問: python400_learn_github
相關文章
相關標籤/搜索