聊聊属性方法property的用法
写之前随便百度了一下博客,又看到廖雪峰的博客了。果然置顶的能力很强。
我想说其实property的用法并不是主要用来做类型检查。反而更多应该是用于简化操作的目的。
写之前想聊一个古老的话题。年初的时候刚接触flask。当时用SQLAlchemy的Model模型去构建了一张表。在刚入门的时候,觉得仅仅是不用写SQL这么一回事
现在看来,其实SQLAlchemy的用法隐含的思想是将一个表抽象为一个对象,或者一个实体。对于实体的内容进行解读。数据库只是作为存放内容的工具而已。
初学的时候,后端要返回数据给前端。按照上面的认知,先用dbname.query.all()查出表中的所有数据。
然后就开始傻傻的写for循环。比如查出来的数据要转成字典。会在循环前定义一个空字典。每次循环用i计数器的值作为字典键值啊这种傻傻的用法。
不过不管怎么说,从功能上面来看,还是完整完成了要求。不得不说是一份不精致的答案。甚至当初因为这种思想,一直搞不清楚json值的正确用法。那是因为自己去实现了从数据到json的转换。所以不优雅,不高效。
混着混着,时间就过去了这么几个月。有些事情就是在没有思考的情况下突然想明白的。不知道是个人风格或是其他。总之现在在用这个的时候就很明确为什么要这么干而不是选择其他方法。
可能更加理解python的目的性了吧:简洁胜于高效
高不高效的事情我还没到可以讨论的阶段。上次看dict类型的实现就明白了。并没有那么多可以研习人家造出来轮子的原理的时间。先用,哪天自然就懂了
接下来简单写一下代码。
基础代码是这样:
# SQLAlchemy Model
class Tools(db.Model):
id = db.Column(db.String(100), primary_key=True)
toolname = db.Column(db.String(100))
tooldir = db.Column(db.String(100))
toolurl = db.Column(db.String(100))
tooltext = db.Column(db.String(100)) # Tool.json(demo)
[
{"toolId":1,"toolName":"工具1","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":2,"toolName":"工具2","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":3,"toolName":"工具3","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":4,"toolName":"工具4","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":5,"toolName":"工具5","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":6,"toolName":"工具6","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"}
] # Flask route restful api
@ns.route('/store')
class Store(Resource):
def get(self):
tools = Tools.query.all()
# do something to change variable name then return
return jsonify(tools)
简单介绍一下上面代码的内容。
1-7行:表的模型类
11-18行:前端给出的json文件(接口字段)
21-27行:后端接口实现(注释部分代表省略了数据处理的代码)
由于后端接口自己去写一个转换的代码,按照以前那种写法会很长。不贴出来了。自己去优化一个更无聊。(码代码久了,更喜欢偷懒了)
所以接下来贴使用property来实现的接口处理
# SQLAlchemy Model
class Tools(db.Model):
id = db.Column(db.String(100), primary_key=True)
toolname = db.Column(db.String(100))
tooldir = db.Column(db.String(100))
toolurl = db.Column(db.String(100))
tooltext = db.Column(db.String(100)) @property
def serialize(self):
series = {
'toolId': self.id,
'toolName': self.toolname,
'tooldir': self.tooldir,
'toolUrl': self.toolurl,
'toolText': self.tooltext
}
return series # Tool.json(demo)
[
{"toolId":1,"toolName":"工具1","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":2,"toolName":"工具2","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":3,"toolName":"工具3","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":4,"toolName":"工具4","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":5,"toolName":"工具5","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"},
{"toolId":6,"toolName":"工具6","toolDir":"demo.png","toolUrl":"../src/file/file1.txt","toolText":"工具说明"}
] # Flask route restful api
@ns.route('/store')
class Store(Resource):
def get(self):
return jsonify([i.serialize for i in Tools.query.all()])
感觉清晰明了很多。
顺便在实现这个的过程中,也算清楚了python自带的json包的方法和flask的jsonify方法的区别是什么。
不得不说,jsonify真是偷懒的好方法。
ps:吐槽一下这狗屎代码插入器。显示在博客当中的时候会因为dom结构宽度不够直接把代码撑到行号中间去。wtf。只能删减掉一些内容了
聊聊属性方法property的用法的更多相关文章
- python-静态方法staticmethod、类方法classmethod、属性方法property
Python的方法主要有3个,即静态方法(staticmethod),类方法(classmethod)和实例方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def ...
- 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别
[面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...
- python_面向对象——属性方法property
1.属性方法 class Student(object): def __init__(self,name): self.name = name @property #属性方法:把一个方法变成一个静态的 ...
- 初识python: 属性方法 @property
属性方法:通过@property把一个方法变成一个静态属性 实例: 调用航班的状态 # 查看航班状态 import random class CheckState(object): def __ini ...
- 面向对象【day08】:静态方法、类方法、属性方法(九)
本节内容 概述 静态方法 类方法 属性方法 总结 一.概述 前面我们已经讲解了关于类的很多东西,今天讲讲类的另外的特性:静态方法(staticmethod).类方法(classmethod).属性方法 ...
- Python 静态方法、类方法和属性方法
Python 静态方法.类方法和属性方法 静态方法(staticmethod) staticmethod不与类或者对象绑定,类和实例对象都可以调用,没有自动传值效果,Python内置函数staticm ...
- Python的程序结构[1] -> 方法/Method[1] -> 静态方法、类方法和属性方法
静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 ...
- Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)
总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...
- <s:property>的用法(jsp获取action中的值或者方法)
1,访问Action值栈中的普通属性: <s:property value="attrName"/> 2,访问Action值栈中的对象属性(要有get set方法) ...
随机推荐
- codefoces384A-Mafia心得
题目描述:One day n friends gathered together to play "Mafia". During each round of the game so ...
- 软件测试博客日记Day02-11.16日 —— 赵天宇 —— 禅道的使用和配置
禅道 1. 安装 1. 进入禅道的官方下载地址:http://www.zentao.net/download/80053.html 2. 下载禅道开源版本. 3. 正常安装,注意一定要放在根目录下. ...
- MATLAB 大数据剔除坏值
在用MATLAB进行数据分析的时候,坏点对正确结果的影响比较大, 因此,我么需要剔除野点,对于坏值的剔除,我们 利用 3σ准则 剔除无效数据: 3σ准则又称为拉依达准则,它是先假设一组检测数据只含有 ...
- 十一、VueJs 填坑日记之使用Amaze ui调整列表和内容页面
上一篇博文我们整合了Amaze ui,并且调整了一个头部header和底部footer文件,其实做起来也很简单,只要按照步骤来做,完全没有问题.今天我们来重新调整一下列表页面和内容页面,使我们做的后台 ...
- 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题
问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...
- 2.1synchronized同步方法
由前言: 在第一章已经出现了非线程安全的情况."非线程安全"其实会发生在多个线程同时对同一个对象中的实例变量进行访问时发生.产生的结果就是脏读(读到被修改过的数据). " ...
- thinkphp实现文件的下载
首先需要看一下大家使用的Thinkphp的版本,不同的版本使用的方法不同,(在导入公共函数的时候方式不同) 我用的是thinkphp3.2.2版本的,因此直接使用import()函数,直接把使用thi ...
- 对java多线程里Synchronized的思考
Synchronized这个关键字在多线程里经常会出现,哪怕做到架构师级别了,在考虑并发分流时,也经常会用到它.在本文里,将通过一些代码实验来验证它究竟是"锁"什么. 在启动多个线 ...
- ML笔记:Where does the error come from?
error来自哪? 来自于偏差Bias和方差Variance. 就如打靶时瞄准一个点f平均,打出的点f星分布在该点周围. 该点与实际靶心f帽的距离就是偏差Bias, 打出的点与该点的分布距离就是方差V ...