python动态类型判断是否合法
来源:互联网 发布:淘宝外卖粮票怎么获得 编辑:程序博客网 时间:2024/06/05 17:46
python是一种动态类型的语言。一个属性,既可以给赋值一个数字,也可以给赋值一个字符串。那么,在项目开发中,怎么才能做到检测赋值的时候输入数据的合法性呢?
----------------------------------
先看下面的代码
- # -*- coding:utf-8 -*-
- '''
- Created on 2013-3-29
- @author: naughty
- '''
- class A(object):
- def __init__(self):
- self.__age=10
- a=A()
- print a.__age
初始化了一个A类的对象a,然后打印__age这个属性,结果如下,提示不存在。
- Traceback (most recent call last):
- File "H:\final\code\PyTestService\comz\test\Copy of Copy of Test.py", line 12, in <module>
- print a.__age
- AttributeError: 'A' object has no attribute '__age'
python中__attr,以__开头的属性是private的。外界访问不到。
---------------------------------------
有了上面的这点知识,那么怎么做到我们题目中说的,输入数据的类型检查呢。
这就使用到了property和setter、deleter的知识了。
先看下property属性
- '''''
- Created on 2013-3-29
- @author: naughty
- '''
- class A(object):
- def __init__(self, a):
- self.__x = a
- @property
- def x(self):
- assert False,"hi one"
- #=======================================================================
- # return self.__x
- #=======================================================================
- a = A(30)
- print a.x
上面代码的执行结果如下:
- Traceback (most recent call last):
- File "H:\final\code\PyTestService\comz\test\Copy of Test.py", line 21, in <module>
- print a.x
- File "H:\final\code\PyTestService\comz\test\Copy of Test.py", line 15, in x
- assert False,"hi one"
- AssertionError: hi one
可以看出来,当给了property注解的时候,访问这个属性,就会去访问注解所在的函数。此时,我们就可以在函数中做一些自己想要的工作了。
再看setter
- '''''
- Created on 2013-3-29
- @author: naughty
- '''
- class A(object):
- def __init__(self, a):
- self.__x = a
- @property
- def x(self):
- return self.__x
- @x.setter
- def x(self, value):
- if isinstance(value, str):
- assert False, "hi two"
- a = A(30)
- a.x="string"
上面代码的运行结果如下:
- Traceback (most recent call last):
- File "H:\final\code\PyTestService\comz\test\Copy of Test.py", line 23, in <module>
- a.x="string"
- File "H:\final\code\PyTestService\comz\test\Copy of Test.py", line 20, in x
- assert False, "hi two"
- AssertionError: hi two
当我们给a.x赋值的时候,调用了x.setter注解所在的函数。此时,如果我们赋值的是一个字符串,那么会抛出一个错误。在这个setter所在的函数里面,就可以做到我们题目中所描述的类型检查了。
再看deleter
- # -*- coding:utf-8 -*-
- '''''
- Created on 2013-3-29
- @author: naughty
- '''
- class A(object):
- def __init__(self, a):
- self.__x = a
- @property
- def x(self):
- return self.__x
- @x.setter
- def x(self, value):
- if isinstance(value, str):
- assert False, "hi two"
- @x.deleter
- def x(self):
- assert False,"hi,three"
- a = A(30)
- a.x = 3
- del a.x
我们在删除的时候会执行deleter注解坐在的函数。这里,我们没有在deleter中删除x属性,而是抛出了一个错误。
--------------------------------------------------------------------------
上面就是对输入数据进行类型检查了。比较繁琐。
下一篇文章介绍了“数据描述符”,也能够做到检查数据输入是否合法。
- python动态类型判断是否合法
- python 正则表达式判断URL是否合法
- python 判断一个IP地址是否合法
- [LintCode 389] 判断数独是否合法(Python)
- Python判断IP地址格式是否合法
- Python正则匹配判断手机号是否合法
- 判断IP4类型的IP或IP段是否合法
- java 中 Date 类型快判断日期是否合法.
- c语言判断ip地址是否合法的ip类型
- Python动态类型,怎么判断是输入数据的合法性?
- javascript判断日期是否合法
- c#判断身份证是否合法
- 判断十六进制数据是否合法
- 判断文件名是否合法
- 判断一个字符串是否合法
- 代码判断邮箱是否合法
- 代码判断邮箱是否合法 .
- 代码判断邮箱是否合法
- 道与术
- jQuery DOM 操作(基本操作、内部插入、外部插入、包裹操作)
- C语言的编程格式
- Spring MVC 文件下载过程中 出现下载文件乱码
- Thread 进阶
- python动态类型判断是否合法
- 轻量级的日期时间控件Pikaday
- Ubuntu 14.04安装在Optiplex 9020 Dell台式机器上以太网连不上问题解决方案
- Java基础知识之一注释
- Eclipse不能导入项目解决方案
- C#数据类型汇总
- org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException
- 安卓开发中非常炫的效果集合
- 工作三天被辞退