Python教程:类的property用法

property: 在新式类中,将类的方法变成属性,方便调用, 1,对他的get方法,添加@property装饰器, 对他的set方法和del方法要是同名函数的,添加@get方法对应的的函数名.setter, 对于python2 的经典类,只有类的get方法有效

class Student(object):
    @property
    def birth(self):
        print("birth的get方法")
        return self._birth

    @birth.setter
    def birth(self, value):
        print("birth的setter方法")
        self._birth = value
        print(self._birth)

    @birth.deleter
    def birth(self):
        print("birth的deleter方法")
s = Student()
s.birth = 23    # 设置
print(s.birth) # 获取
s.birth=22  # 执行装饰器带有settter的方法
del s.birth   #  # 执行装饰器带有settter的方法


class Foo(object):
    def get_bar(self):
        print('getter......')
        return '老王'
    def set_bar(self,value):
        print('setter........')
        return 'set value'+ value
    def del_bar(self):
        print('deleter........')
        return "删除老王"
    BAR = property(get_bar,set_bar,del_bar,"description......")  #用help(property) 可查看property的各种参数方法

obj = Foo()
print(obj.BAR)
obj.BAR = "alex"   # 自动调用第二个参数中定义的方法,set_bar方法,并将"alex'当做参数传入
desc = Foo.BAR.__doc__         # 自动获取第四个参数中设置的值, description..
del obj.BAR # 自动调用del_bar 方法

输出:

birth的setter方法
23
birth的get方法
23
birth的setter方法
22
birth的deleter方法
getter......
老王
setter........
deleter........

property应用

初始:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Student(object):
    def get_score(self):
        print('你个网吧打啊')
        return self._score

    def set_score(self, value):
        print('吃啥啊',value)
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

s = Student()
s.set_score(60) # ok!
print(s.get_score())
s.set_score(90)
print(s.get_score())

输出:

吃啥啊 60
你个网吧打啊
60
吃啥啊 90
你个网吧打啊
90

优化:

class Student(object):
    @property
    def score(self):
        return self._score

    @score.setter
    def score(self,value):
        if not isinstance(value, int):
            raise ValueError('分数必须是整数才行呐')
        if value < 0 or value > 100:
            raise ValueError('分数必须0-100之间')
        self._score = value

s = Student()
s.score = 60 # OK,实际转化为s.set_score(60)
print(s.score )# OK,实际转化为s.get_score()
s.score = 98
print(s.score )

输出:

60
98
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值