@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
@property
修飾,從普通實例方法轉變成經過"實例屬性"調用的特殊實例方法。使用print(emp1.salary)
,本質是調用對象emp1的salary實例方法,返回值30000,因此第一個打印30000.<class 'int'>
@property
修飾的方法,結果報錯,說明:實例方法一旦使用裝飾器@property
修飾,就不能再使用對象名.實例方法名([形參列表])
的方式調用。示例代碼: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
代碼說明:函數
salary
值爲2000,因此打印的時候也是2000.salary
屬性設置值3000,由於值範圍在(1000, 50000)之間,因此能夠正常設置,因此打印的時候,也是3000。示例代碼: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
程序說明:對象
@property
表明獲取屬性,@salary.setter
表明設置屬性,分別對應get_salary
和set_salary
方法。備註:
更多精彩博客,請訪問: 聶發俊的技術博客
對應視頻教程,請訪問: python400
完整markdown筆記,請訪問: python400_learn_github