zoukankan      html  css  js  c++  java
  • python3

    传统的绑定属性值,会把属性暴露出去,而且无法检查参数是否合法,如下:

    class Test(object):

      def  __int__(self,age):

        self.age = age

    为了检查参数的合法性,可以设置一个get_age()方法,和一个set_age()方法,如下:

    class Test(object):

      def get_age(self):

        return self.__age

      def set_age(self,value):

        if not instance(value,int):

          raise ValueError('age must be an integer...')

        if value <0 or value > 130:

          rasie ValueError('age must between 0~130')

        self.__age = value

    但是,上面的例子,调用方法又时略显复杂,没有直接用属性这么直接简单。

    python内置的@protery装饰器可以把一个方法变成属性来调用。

    class Test(object):

      @property

      def  age(self):

        return self.__age

      @age.setter

      def age(self,value):

        if not instance(value,int):

          raise ValueError('age must be an integer...')

        if value <0 or value > 130:

          rasie ValueError('age must between 0~130')

        self.__age = value

    s = Test()
    s.age = 100
    print(s.age)

    把一个getter方法变成属性,只需要加上@property就可以,同时,@property本身又创建了另一个装饰器@age.setter,负责把一个setter方法变成属性赋值,这样,我们就拥有一个可控的属性操作了。

  • 相关阅读:
    Python 函数装饰器简明教程
    *arg和**kwarg的区别
    克里金插值
    C语言Hello world
    ibatis错误
    typealias
    视图
    权限分级设置
    走出浮躁的泥沼:学会享受学习过程的乐趣
    R语言 eval(quote(x)) 和 eval(x)
  • 原文地址:https://www.cnblogs.com/AndyChen2015/p/7403139.html
Copyright © 2011-2022 走看看