Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property
参考:@property
NOTE
1.在绑定参数时,为了避免对属性不符合逻辑的操作,需要对传入的参数进行审核。
#!/usr/bin/env python3
class MyClass(object):
"""docstring for MyClass"""
def __init__(self):
super(MyClass, self).__init__()
def set_Attr(self, score):
if score >= 0 and score <= 100:
self.score = score
else:
raise ValueError('Attribute Setting Error')
def get_Attr(self):
return self.score
def main():
A = MyClass()
A.score = 59
print(A.get_Attr())
A.set_Attr(101)
print(A.get_Attr())
if __name__ == '__main__':
main()
59
Traceback (most recent call last):
File "./oop9.py", line 26, in <module>
main()
File "./oop9.py", line 22, in main
A.set_Attr(101)
File "./oop9.py", line 12, in set_Attr
raise ValueError('Attribute Setting Error')
ValueError: Attribute Setting Error
普通的做法是,调用对象的方法传入参数并设置,但是这样看上去又过于繁琐。
2.Python内置的@property装饰器负责把一个方法变成属性进行调用:
class Student(object):
"""docstring for Student"""
def __init__(self):
super(Student, self).__init__()
@property
def score(self): # turn into an attribute
return self.score
@score.setter
def score(self, val):
if val >= 0 and val <= 100:
self.score = val
else:
raise ValueError('Attribute Setting Error')
RecursionError: maximum recursion depth exceeded in comparison
把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值。
getter => Attribute => create setter
3.还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:
class Student(object):
"""docstring for Student"""
def __init__(self):
super(Student, self).__init__()
@property
def score(self): # turn into an attribute
return self.score
此时Attribute score就是一个只读属性。无法对其进行设置或赋值。
2017/3/3
Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property的更多相关文章
- Python学习札记(三十) 面向对象编程 Object Oriented Program 1
参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...
- Python学习札记(三十三) 面向对象编程 Object Oriented Program 4
参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...
- Python学习札记(三十一) 面向对象编程 Object Oriented Program 2
参考:类和实例 注意理解第七点. NOTE: 1.类是抽象的模板,比如Student类,实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. ...
- Python学习札记(四十) 面向对象编程 Object Oriented Program 11
参考:使用元类 NOTE: type() 1.type()函数可以用于检查一个类或者变量的类型. #!/usr/bin/env python3 class Myclass(object): " ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- Python学习札记(三十四) 面向对象编程 Object Oriented Program 5
参考:获取对象信息 NOTE 1.type()函数可以用来判断对象的类型: >>> type(123) <class 'int'> >>> type(' ...
- Python学习札记(三十八) 面向对象编程 Object Oriented Program 9
参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...
- Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
参考:slots NOTE 1.动态语言灵活绑定属性及方法. #!/usr/bin/env python3 class MyClass(object): def __init__(self): pas ...
- Python学习札记(三十五) 面向对象编程 Object Oriented Program 6
参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...
随机推荐
- mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法
Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...
- Linux系统内核main函数执行之前
1.linux是一个操作系统在机器加电后,需要从硬件通过一个引导程序加载os kernel,那么在os kernel的main函数运行之前,都发生了什么呢? (1)引导BIOS(存储在ROM芯片中,R ...
- iPad - 开发(Universal Applications)
一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdi ...
- 【php】---mysql语法增、删、改、查---【巷子】
1.mysql基本语法 001.增 语法: insert into 表名 (列1,列2,列3) values(值1,值2,值3) 批量插入:插入insert-插入多行 语 ...
- Jenkins构建时提示maven版本问题
在使用Jenkins进行项目构建的时候出现下面问题 [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were enc ...
- SQL取某个字符串最后一次出现的位置后面的字符串方法
--sql怎么取某个字符串最后一次出现的位置后面的字符串 declare @s varchar(max); set @s = 'fj/2016815/2016081553677565.pdf'; se ...
- JAVAWEB Filter使用
Filter学习 1Filter是什么:是过滤器简称 2Filter有什么作用:在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator ...
- CodeForces 25C(Floyed 最短路)
F - Roads in Berland Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...
- tomcat设置编码格式utf8
利用request.setCharacterEncoding("UTF-8");来设置Tomcat接收请求的编码格式,只对POST方式提交的数据有效,对GET方式提交的数据无效! ...
- 十六.MySQL存储过程
1.创建一个没有参数的存储过程 CREATE PROCEDURE sp1() SELECT VERSION(); 调用存储过程:CALL sp1(); 2.带有IN参数的存储过程 CREATE PRO ...