美文网首页
Python中@property的使用讲解

Python中@property的使用讲解

作者: SevenBy | 来源:发表于2018-02-11 00:32 被阅读779次

    装饰器(decorator)可以给函数动态加上功能,对于类的方法,装饰器一样起作用。Python内置的@property装饰器就是负责把一个方法变成属性调用的:


    下面写一个例子,如有不懂的同学可以联系我邮箱

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    __author__='byx54192@gmail.com'
    
    class Student(object):
    
        @property #将birth 转换为属性,外部可是直接s.birth访问
        def birth(self):
            return self._birth
    
        @birth.setter #@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值
        def birth(self, value):
            if value>0 and value<100:
                self._birth = value
            else:
                raise ValueError('birth must between 0~100')
    
        @property #将age方法转换为属性,外部调用时,可以用s.age访问。
        def age(self):
            return 2015 - self._birth
    s= Student()
    s.birth=10
    print(s.age)
    print(s.birth)
    

    练习

    请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    __author__='byx54192@gmail.com'
    
    class Screen(object):
        @property
        def width(self):
            return self._width
        @width.setter
        def width(self,value):
            if value!=768:
                return 0
            self._width=value
    
        @property    
        def height(self):
            return self._height
        @height.setter
        def height(self,value):
            if value!=1024:
                return 0
            self._height=value
    
        @property
        def resolution(self):
            return self._width*self._height
    s=Screen()
    s.width=768
    s.height=1024
    print('resolution=',s.resolution)
    if s.resolution == 786432:
        print('测试通过!')
    else:
        print('测试失败!')
    
    Python中@property的使用讲解

    相关文章

      网友评论

          本文标题:Python中@property的使用讲解

          本文链接:https://www.haomeiwen.com/subject/fofhtftx.html