聊聊属性方法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方法) ...
随机推荐
- C#中访问私有成员
首先访问一个类的私有成员不是什么好做法.大家都知道私有成员在外部是不能被访问的.一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员造访,可以套用下面这种非常好的方式去解决. pr ...
- phpcms实现全站搜索
如果制作的静态页面中有搜索功能,那么使用phpcms进行替换怎么替换呢?会不会越到很多的麻烦呢?接下来进行phpcms替换静态页面中的搜索功能. 第一步:搜索页面的form表单提交书写,form表单怎 ...
- [转]Android应用安装包apk文件的反编译与重编译、重签名
背景介绍: 最近在做Robotium自动化测试,使用到solo.takeScreenshot()函数以在测试过程中截图,但此函数需要被测试APP具有<uses-permission androi ...
- ssh简单配置
Port 2223Protocol 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_keyKeyRegeneration ...
- python 多线程批量传文件
#!/usr/bin/env python #_*_ coding:utf-8 -*-#autho:leiyong#time:2017-06-05#version: 1.3 import parami ...
- SSM框架开发web项目系列(一) 环境搭建篇
前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...
- Function Programming - 纯函数(Pure Function)
纯函数的定义,非常重要!! Pure function 意指相同的输入,永远会得到相同的输出,而且没有任何显著的副作用. 老样子,我们还是从最简单的栗子开始: var minimum = 21; va ...
- Geth控制台使用及Web3.js使用实战
在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3. Geth 控制台(REPL)实现了所有的web3 API及Admin API, 使用好 Geth 就是必修课.结合Geth命令用 ...
- 多线程编程 - PHP 实现
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- CCF-201503-3-节日
问题描述 试题编号: 201503-3 试题名称: 节日 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一类节日的日期并不是固定的,而是以"a月的第b个星期c&q ...