@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