python私有属性和property装饰器_python-面向对象-15-property装饰器/get和set方法

1.@property装饰器

@property可以将一个方法的调用方式变成"属性调用"。下面是一个简单的示例,让大家体会一下这种转变。

示例代码:

class Employee:

@property

def salary(self):

return 30000

emp1 = Employee()

print(emp1.salary)

print(type(emp1.salary))

emp1.salary()

运行结果:

Traceback (most recent call last):

File "test.py", line 11, in

emp1.salary()

TypeError: 'int' object is not callable

30000

代码说明:

首先实例方法salaly使用装饰@property修饰,从普通实例方法转变成通过"实例属性"调用的特殊实例方法。使用print(emp1.salary),本质是调用对象emp1的salary实例方法,返回值30000,所以第一个打印30000.

30000是int类型的数值,所以使用type函数,显示

使用普通的调用方式去调用装饰器@property修饰的方法,结果报错,说明:实例方法一旦使用装饰器@property修饰,就不能再使用对象名.实例方法名([形参列表])的方式调用。

2.get和set方法

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

示例代码:

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())

运行结果:

2000

3000

代码说明:

因为在实例化对象的时候,设置的salary值为2000,所以打印的时候也是2000.

首先对salary属性设置值3000,因为值范围在(1000, 50000)之间,所以可以正常设置,所以打印的时候,也是3000。

2.2 使用装饰器实现get和set方法

示例代码:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值