python面向对象高级编程_Python 面向对象高级编程——使用@property

1.1使用@property

输入成绩score时,需对这个参数进行检查。

>>> class Student(object):

... def get_score(self):

... return self.__score

... def set_score(self, value):

... if not isinstance(value, int):

... raise ValueError('score must beinteger')

... if value < 0 or value > 100:

... raise ValueError('score mustbetween 0 and 100.')

... self.__score = value

...

>>> s = Student()

>>> s.set_score(60)

>>> s.get_score()

60

>>> s.set_score(999)

Traceback (most recent call last):

File "", line 1, in

File "", line 8, in set_score

ValueError: score must between 0 and 100.

有没有既能检查参数,又可以用类似属性这样简单的方式来访问和修改类的变量呢?

Python内置的@property装饰器就是负责把一个方法变成属性。

>>> class Student(object):

... @property

... def score(self): --score可以理解为属性

... return self.__score --返回属性

... @score.setter

... def score(self, value): --score可以理解为属性

... if not isinstance(value, int):

... raise ValueError('Score must be aninteger.')

... if value < 0 or value > 100:

... raise ValueError('Score mustbetween 0 and 100.')

... self.__score = value --修改属性

...

>>> s = Student()

>>> s.score = 60 --修改属性,这里不再是调用方法,score属性可读可写

>>> s.score

60

>>> s.score = -1

Traceback (most recent call last):

File "", line 1, in

File "", line 10, in score

ValueError: Score must between 0 and 100.

定义只读属性—只定义getter方法,不定义setter就是只读

>>> class Student(object):

... @property

... def birth(self):

... return self._birth

... @birth.setter

... def birth(self, value):

... self._birth = value --birth可读可写

... @property

... def age(self):

... return 2016 - self._birth --age只读

...

>>> s = Student()

>>> s.birth = 1992

>>> s.birth

1992

>>> s.age

24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值