Python类的定义与使用

Python类的定义与使用

 

目标:

1.类的定义

2.父类,子类定义,以及子类调用父类

3.类的组合使用

4.内置功能

 

1.类的定义

代码如下:

 

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. class Hotel(object):
  4. “””docstring for Hotel”””
  5. def __init__(self, room, cf=1.0, br=15):
  6. self.room = room
  7. self.cf = cf
  8. self.br = br
  9. def cacl_all(self, days=1):
  10. return (self.room * self.cf + self.br) * days
  11. if __name__ == ‘__main__’:
  12. stdroom = Hotel(200)
  13. big_room = Hotel(230, 0.9)
  14. print stdroom.cacl_all()
  15. print stdroom.cacl_all(2)
  16. print big_room.cacl_all()
  17. print big_room.cacl_all(3)

 

2.父类、子类以及调用父类

代码如下:

 

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # 父类
  4. class AddBook(object):
  5. def __init__(self, name, phone):
  6. self.name = name
  7. self.phone = phone
  8. def get_phone(self):
  9. return self.phone
  10. # 子类,继承
  11. class EmplEmail(AddBook):
  12. def __init__(self, nm, ph, email):
  13. # AddBook.__init__(self, nm, ph) # 调用父类方法一
  14. super(EmplEmail, self).__init__(nm, ph) # 调用父类方法二
  15. self.email = email
  16. def get_email(self):
  17. return self.email
  18. # 调用
  19. if __name__ == “__main__”:
  20. Detian = AddBook(‘handetian’, ‘18210413001’)
  21. Meng = AddBook(‘shaomeng’, ‘18210413002’)
  22. print Detian.get_phone()
  23. print AddBook.get_phone(Meng)
  24. alice = EmplEmail(‘alice’, ‘18210418888’, ‘alice@xkops.com’)
  25. print alice.get_email(), alice.get_phone()

 

3.类的组合使用

代码如下:

 

 

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. ”’
  4. 1.class类的组合使用
  5. 2.手机、邮箱、QQ等是可以变化的(定义在一起),姓名不可变(单独定义)。
  6. 3.在另一个类中引用
  7. ”’
  8. class Info(object):
  9. def __init__(self, phone, email, qq):
  10. self.phone = phone
  11. self.email = email
  12. self.qq = qq
  13. def get_phone(self):
  14. return self.phone
  15. def update_phone(self, newphone):
  16. self.phone = newphone
  17. print “手机号更改已更改”
  18. def get_email(self):
  19. return self.email
  20. class AddrBook(object):
  21. ”’docstring for AddBook”’
  22. def __init__(self, name, phone, email, qq):
  23. self.name = name
  24. self.info = Info(phone, email, qq)
  25. if __name__ == “__main__”:
  26. Detian = AddrBook(‘handetian’, ‘18210413001’, ‘detian@xkops.com’, ‘123456’)
  27. print Detian.info.get_phone()
  28. Detian.info.update_phone(18210413002)
  29. print Detian.info.get_phone()
  30. print Detian.info.get_email()

 

 

 

4.内置功能(函数()加与不加的区别)

代码如下:

 

 

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. class Books(object):
  4. def __init__(self, title, author):
  5. self.title = title
  6. self.author = author
  7. def __str__(self):
  8. return self.title
  9. def __repr__(self):
  10. return self.title
  11. def __call__(self):
  12. print “%s is written by %s” %(self.title, self.author)
  13. if __name__ == ‘__main__’:
  14. pybook = Books(‘Core Python’, ‘Wesley’)
  15. print pybook
  16. pybook()

 

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. class Number(object):
  4. “””Custum object
  5. add/radd -> +;
  6. sub/rsub -> -;
  7. mul/rmul -> *;
  8. div/rdiv -> /;
  9. “””
  10. def __init__(self, number):
  11. self.number = number
  12. def __add__(self, other):
  13. return self.number + other
  14. def __radd__(self, other):
  15. return self.number + other
  16. def __sub__(self, other):
  17. return self.number – other
  18. def __rsub__(self, other):
  19. return other – self.number
  20. def __gt__(self, other):
  21. if self.number > other:
  22. return True
  23. return False
  24. if __name__ == ‘__main__’:
  25. num = Number(10)
  26. print num + 20
  27. print 30 + num
  28. print num – 5
  29. print 11 – num
  30. print num > 20

 

位于同一局域网段的云服务器怎么购买呢?

要搭建一个集群,必须要求所有节点在同一局域网

现在云服务器怎么做到买的是同一局域网的呢

有些云服务器厂商有虚拟交换机( VSwitch )的配置,虚拟交换机连接的局域网网络性能怎么样呢?

ps: 求推荐性价比高的服务器提供商,配置 4c32g SSD 以上,dmca ignored 或者 offshare *好..

yfwl 1
yfwl 48 天前
内网云服务器很简单的,offshare 可以 dmca ignored 不保证… BASE64:UVEyMzI3Njc3NTk2
calmzhu 2
calmzhu 48 天前 via Android ❤️ 1
aws azure aliyun 华为这些全部有 vpc 网络的 。
opengps 3
opengps 48 天前 via Android ❤️ 1
局域网现在都是用 vpc 实现,买之前提前规划好网关交换机信息,把机器选到这个交换机下
zhuzhibin 4
zhuzhibin 48 天前 via iPhone
VPC
stanchenxxx2015 5
stanchenxxx2015 48 天前
VPC 配一个就妥了
freecloud 6
freecloud 48 天前
/t/751066 腾讯云轻量,同账号同机房,应该是内网直接互通的。二月份,还有免费升配的活动。
lry 7
lry 47 天前
@yfwl
@freecloud
国内的机器都不考虑 一是不方便 二是价钱太贵了 🙂
freecloud 8
freecloud 46 天前
@lry 海外轻量,可以考虑下。24 元 /月起,再加代理折扣。
yfwl 9
yfwl 45 天前
有海外的.. 谁说没有,海外内网也很简单

百度UEditor粘贴或插入的表格不显示边框的解决办法

这个方法是我自己研究出来的。

编辑器里面可以看到表格有边框,在前台页面展示出来的却没有边框。

修改办法:

打开ueditor.all.js

1、找到下面的代码,修改

utils.each(tables, function (table) {
removeStyleSize(table, true);
domUtils.removeAttributes(table, [‘style’]); //改这里,原来是 [‘style’, ‘border’]
utils.each(domUtils.getElementsByTagName(table, “td”), function (td) {
if (isEmptyBlock(td)) {
domUtils.fillNode(me.document, td);
}
removeStyleSize(td, true);
});
});
这是为了不让UEditor去掉粘贴的表格的边框,也就是table元素的border属性(不是border内联样式)

2、UEditor插入的表格实际是没有边框的,编辑器中看到边框,其实是因为编辑器里面(<iframe>中)有下面这个全局css
td,th{ border:1px solid #DDD; }
但是前台展示是没有这段全局css的,所以导致看不到边框。

我们可以让编辑器中无边框的表格,显示成虚线灰色的边框,这也是其他很多html编辑器的处理方式。

找到并修改下面的代码

utils.cssRule(‘table’,
//选中的td上的样式
‘.selectTdClass{background-color:#edf5fa !important}’ +
‘table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}’ +
//插入的表格的默认样式
‘table{margin-bottom:10px;border-collapse:collapse;display:table;}’ +
‘td,th{padding: 5px 10px;border: 1px dashed #DDD;}’ + //这里修改 1px solid #DDD 为 1px dashed #DDD
‘caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}’ +
‘th{border-top:1px dashed #BBB;background-color:#F7F7F7;}’ + //这里修改 1px solid #BBB 为 1px dashed #BBB
‘table tr.firstRow th{border-top-width:2px;}’ +
‘.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }’ +
‘td p{margin:0;padding:0;}’, me.document);
目的是让全局的td/th边框样式显示为灰色虚线

3、*后就是table上右键菜单中有个”表格-设置表格边线可见”的功能。这个功能会让表格显示出实线边框,实际前台展示也是有边框的。

现在td是有实线边框的,可是th却还是虚线,所以要改下面的代码,增加一段对th的处理

注意:th就是表格标题列/行。可以用右键菜单”表格-插入表格标题列/行”插入th

execCommand: function () {
var table = getTableItemsByRange(this).table;
utils.each(domUtils.getElementsByTagName(table,’td’),function(td){
td.style.borderWidth = ‘1px’;
td.style.borderStyle = ‘solid’;
td.style.borderColor = ‘windowtext’;
});
//增加下面一段
utils.each(domUtils.getElementsByTagName(table,’th’),function(th){
th.style.borderWidth = domUtils.getComputedStyle(th, “border-width”);
th.style.borderStyle = ‘solid’;
th.style.borderColor = ‘windowtext’;
});
}

*后如果你用的是ueditor.all.min.js,需要将改过的代码压缩一份min版本。

————————————————

VScode连接远程服务器上的jupyter notebook

工欲善其事,必先利其器,开发工具这个东西觉得折腾下还是有好处的。但常常感觉专门抽出时间搞这个浪费时间,更常见的现象是已经明显感觉到当前的开发工具用的很别扭,而且告诉自己等这个忙完了要搭一个更方便的工具,到*后却没下文了直到下次再次遇到这种感觉。我这会就是再次遇到了,想用VSCode连接服务器上的jupyter notebook运行tensorflow代码,这样在本地的VScode中直接写代码就方便了很多。整个过程很简单,我自诩记性也不错,但还是不如这白纸黑字来的保险,查资料也是很花时间的。

首先是本机与服务器之间配置ssh就不仔细描述了,要是忘了google一下“ssh远程登录服务器”大把都是资料而且大多数说的都是对的。但*好在~/.ssh/config中按照下面的样子再配置下,ssh用起来会更方便的。

%title插图%num

接下来是vscode这边要能远程连接到服务器上,记住不是在本地写代码然后再发送到服务器上,而是直接连接到了服务器的某个路径下,VScode对文件的增删改查就相当于是操作了服务器上这个路径下的对应文件(也许说的比较啰嗦,但是觉得概念还是要清楚的)。实现这个目的只需要3步:

1、在扩展(EXTENSIONS)中搜插件Remote – SSH安装后再重新启动VScode。
2、鼠标点击VScode左下角的齿轮选择命令模式(command paletten),mac对应的快捷键是shift+cmd+p。
3、在VScode顶部中间弹出的下拉菜单中输入Remote – SSH点击图片中选中的选项,接下来再点击你要连接的服务器的名字就行了,*后会弹出一个新的VSCode。
vscode现在就可以远程连接服务器了,如果想写python代码,直接创建文件就可以了。

%title插图%num

%title插图%num

而服务器这边要能够创建jupyter noteboot,也就是些安装了,不难就是找起来有点麻烦。我喜欢用conda安装一个虚拟环境就是因为隔离了干净省心,真要是搞坏了直接删了重新建一个。服务器上的操作也只需要3步:

1、安装虚拟环境:

conda create –name notebook python=3.6
2、激活虚拟环境并安装jupyter notebook:

source activate notebook
conda install -c conda-forge jupyter notebook
3、创建一个notebook服务:

sudo jupyter notebook –port=8889 –allow-root
结果如下:*下面的两个URL就是刚才启动的服务的地址,我复制http://localhost:8889/?token=aef9a514fa484b83aa4554371024ebc5b50bbed25c2521ab,当然复制另一个也没问题。

%title插图%num

*后在已经连接到服务器的VScode中进入命令模式,点击下图下拉菜单中被选中的选项(好绕口,理解就好)。意思也很明显:指定一个本地或者远程的jupyter服务连接。

%title插图%num

把刚才复制的URL粘贴进去,按回车。

%title插图%num

创建一个jupyter文件测试下:

%title插图%num

整个过程就这么简单而且内容也不多,但就是写了快两个小时吧,正好有今晚有时间就整理一下,以后就不需要google再去各种找了。后面几张大图看起来好丑,感觉以后要学一些有关排版设计的内容了,忽然想起自己曾今自学了一段时间PS,好久没用这会好像也忘差不多了。回头自己读刚才写的blog隐隐约约有种很着急的感觉,不知道是思维还是文笔的锅,总之有时间就多写写,“感觉”也是可以慢慢积累的呢~。

Spring MVC+Mybatis常见错误及解决

1

org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [0, 1, param1, param2]

出现这个错误是由于在执行sql的时候无法匹配sql语句的通配符造成的,有两个解决方法:
<1>、在对应dao的xml文件的sql语句要这样写

<select id=”findByUsernameAndPassword” resultType=”com.lzcc.model.User”>
select * from user where username = #{0} and password = #{1};
</select>
1
2
3
<2>、在dao接口的方法中的参数中添加@param注解
————————————————

List<User> findByUsernameAndPassword(@Param(“username”) String username,@Param(“password”) String password) throws SQLException;
————————————————

Python是什么

Python是什么

python 中文就是蟒蛇的意思。
在计算机中,它是一种编程语言。
Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,*个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的*终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写。
1,发展历程编辑
自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python[1] 已经成为*受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长[2] 。
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学
已经采用Python教授程序设计课程。例如卡耐基梅隆大学的编程基础和麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学
计算软件包都提供了Python的调用接口,
例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的
科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语
言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
● 首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其*大多数扩展库。
● 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
● *后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。%title插图%num
2,产生
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC
这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido
决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
3,风格
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
设计者开发时总的指导思想是,对于一个特定的问题,只要有一种*好的方法来解决就好了。这在由Tim
Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one– and
preferably only one –obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There’s More Than One Way To Do It)完全相反。
Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言
是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列
方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
4,设计定位
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。
Python开发者的哲学是“用一种方法,*好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒*
花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大
规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师
倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和
工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很
多人还把Python作为一种“胶水语言”(glue
language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google
Engine使用C++编写性能要求*高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(AlexMartelli)说:“这很难讲,不过,2004 年,Python 已在 Google 内部使用,Google 召募许多 Python高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we
must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”

iOS图标&启动图生成器(一)

前 言
一个完整的app都需要多种尺寸的图标和启动图。一般情况下,设计师需要根据开发者提供的一套规则,设计出各种尺寸的图标和启动图供开发人员使用。

但*近作者利用业余时间做了个app,因为不希望耽误设计师较多时间,希望能自己来搞定各种尺寸的图标,就只跟设计师要了*大尺寸的图标和启动图各一个。本想着找一下现成的工具,批量生成需要的的图片,但*后没有找到,只好自己使用Photoshop切出了不同尺寸的图片。

这期间还换过一次图标和启动图,作者就重复了切图工作,这花费了大量的时间。于是事后,作者开发了一个mac app——图标&启动图生成器(简称生成器)以提高工作效率。作者用两篇文章分别介绍生成器的使用和实现细节。

本篇文章介绍生成器的功能和使用方式。

01 生成器功能介绍
根据原图一键生成整套规则的图片;

支持选择所需要的平台规则;

支持选择/输入图片导出路径;

自动打开导出的图片文件夹。

02 生成器支持的平台
截止本篇文章发布,生成器v0.3版本共支持12套平台规则。

iPhone AppIcons(iPhone app 图标规则)

iPhone LaunchImages Portrait(iPhone app 竖屏启动图规则)

iPhone LaunchImages Landscape(iPhone app 横屏启动图规则)

iPad AppIcons(iPad app 图标规则)

iPad LaunchImages Portrait(iPad app 竖屏启动图规则)

iPad LaunchImages Landscape(iPad app 横屏启动图规则)

Mac AppIcons(Mac app 图标规则)

Watch AppIcons(Apple Watch app 图标规则)

CarPlay AppIcons(CarPlay app 图标规则)

Android AppIcons(Android app 常用图标规则)

Android LaunchImages Portrait(Android app 常用竖屏启动图规则)

Android LaunchImages Landscape(Android app 常用横屏启动图规则)

03 生成器界面介绍
在了解了生成器的基础功能后,来看看生成器的界面。如下图。
%title插图%num

生成器的界面比较简洁,控件元素按照从上到下、从左到右的顺序分别为:

图片框(承载源图片)

平台选择器(供选择平台规则)

路径按钮(供选择图片导出路径)

路径文本框(显示选择的路径,支持直接输入路径)

导出按钮(在目标路径中生成符合所选定的平台规则的图片,并打开路径文件夹)

04 生成器使用步骤
生成器的使用步骤非常简单,这里以此生成器app的图标生成过程为例进行介绍。

1、准备源图片
此生成器是一个mac app,需要10种尺寸的图标,如下图。

%title插图%num
其中,所需要的*大图标的尺寸为1024*1024。作者需要准备好这张*大尺寸的图片,并拖拽到图片框中作为源图片。

2 、选择平台规则
作者需要生成符合mac app图标规则的所有图标图片,所以这里选择Mac AppIcons。

3、选择导出路径
这时,点击导出按钮已经能够将源图片切成所需要的一套图片了。但在这之前,选择一个合适的图片导出路径,会便于作者管理生成的图片。另外,对文件路径规则比较熟悉的同学可以直接输入路径。

4、导出图片
点击导出按钮可以在目标路径中生成符合所选定平台规则的图片,并打开这些图片所在的文件夹以供使用。

按照以上4步,可以快速得到所需要的符合各种平台规则图标和启动图。

05 获取app资源