一、面向对象思想
张老师吃饭,饭从哪里来?
(1)自己做
面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照指向的逻辑顺序组织在一起,数据与函数分开考虑。
面向过程:根据业务逻辑从上到下写代码。查询是执行者
面向对象:将数据与函数绑定到一起,进行封装,对外界提供调用。程序员是指挥者
面向对象的思维解决问题的重点:
(1)当遇到一个需求的时候不用自己取实现,如果自己一步步实现那就是面向过程
(2)应该找一个专门做这个事的人来做
(3)面向对象是基于面向过程的
二、类与对象
面向对象编程的两个非常重要的概念:类和对象
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提供了另外一个新的概念—类
类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象。
1、类
类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在,这个存在就是对象,一个类可以找到多个对象
2、对象
某一个具体事物的存在,在现实世界中可以是看得见摸得着的
可以是直接使用的
3、类与对象的关系:
类就是创建对象的模板
4、类的组成:
类的名称:类名
类的属性:一组数据
类的方法:允许操作的方法(行为)
5、类的抽取:
如何把日常生活中的十五抽象成抽象中的类?
拥有相同或者类似的属性和行为的对象都可以抽象出一个类
一般名词都是类
三、定义类
定义一个类,格式如下:
class 类名:
方法列表
四、创建对象
定义了一个car类,就好比车有一个图纸,那么接下来就应该把图hi交给生成工人们去生成了
pyhon中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:
对项目=类名()
例如:
BMW=Car0
BMW.color = '黑色'
BMW.wheelNum = 4
BMW.move()
BMW.toot()
print(BMW.color)
print(BMW.wheelNum)
注意:
五、init()函数
在上一小节的demo中,我们已经给BMW这个对象添加了2个属性,wheelNum(车的轮胎数量)以及color(车的颜色),试想如果再次给创建一个对象的话,肯定也需要进行添加属性,显然这样做很费事,那么有没有办法能够在创建对象的时候,就顺便把车这个对象的属性给设置呢?
通过_init_()函数为对象初始化属性值
#定义汽车类
class Car:
def _init_(self):
self.wheelNum = 4
self.color = '蓝色'
def move(self):
print('车在跑,目标:夏威夷')
#创建对象
BMW = Car()
print('车的颜色为:%s'%BMW.color)
print('车轮胎数量为:%d'%BMW.wheelNum)
当创建Car对象后,在没有调用_init_()方法的前提下,BMW就默认拥有了2个属性wheelNum和color,原因就是_init_()方法是在创建对象后,就立刻被默认调用了(为对象属性进行初始化赋值)。
这种对象的属性进行赋值的行为称之为默认初始化
这样子每个对象创建处理,属性值都一样,不能体现多样性,能不能再创建对象的同时对对象属性进行赋值呢?
def _init_(self,newWheelNum,newColor):
self.wheelNum = newWheelNum
self.color = newColor
这种对象的属性进行赋值的行为称之为针对性初始化
六、str()函数
当我们通过print()函数将对象进行打印时,打印的是该对象的类型和地址。
如果想打印对象时,出来的是对象的一些属性值,怎么办呢?
def _str_(self):
msg = '嘿'
return msg
当使用print输出对象的时候,只要自己定义了_str_(self)方法,那么就会打印从在这个方法中return的数据
七、self关键字
所谓的self,可以理解为自己
可以把self当作C++中类里面的this指针一样理解,就是对象自身意思
某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可
八、面向对象的应用案例
烤土豆应用:
示例属性如下:
九、隐藏数据
如果有一个对象,当需要却对其进行修改属性时,有2中方法
class people(object):
def _init_(self,name):
self._name = name
def getName(self):
return self._name
def setName(self,newName):
if len(newName) >= 5:
self._name = newName
else:
print('error:名字疮毒需要大于或者等于5')
xiaoming = people('HENG')
print(xiaoming._name)
python中没有像java中public和private这些关键字来区别公有熟悉和私有属性
它是以属性命名方式来区分,如果在属性名前面加了2个下划线,则表没该属性是私有属性,否则为公有属性。
十、del()函数
创建对象后,python解释器默认调用_init_()方法
当删除一个对象十,python解释器也会默认调用一个方法,这个方法为_del_()方法
创作者:Eric· Charles
openlayers是一个偏重量型的前端GIS可视化类库,但是它基本上不具备空间分析运算的能力。举个例子,比如:1、判断线与线是否交叉2、线是否穿过多边形当然,它还是具备了一些简单的空间运算能力,比如geometry对象...
springboot访问静态资源时发生以下异常:javax.servlet.ServletException: Circular view path [login]: would dispatch back to the current handler URL [/login] again经过查找原因可知如下结果:由于重名了,spingboot不知道该执行哪个路径,所以报错。待深入...
1.环境win10 + Python3.6 + Django (2.1.10) + PyInstaller (4.2)安装方式一:在线安装pip install pyinstaller此处我是直接在我的虚拟环境在线安装#方式二:离线安装future-0.18.2.tar.gzpefile-2019.4.18.tar.gzaltgraph-0.17-py2.py3-none-any.whlpywin32_ctypes-0.2.0-py2.py3-none-any.whlpyinsta
NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。Redis 系列:1、Redis 的五大数据类型Redis-key127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> set n...
一、构建EurekaServer工程1、pom.xml2、application.yml3、 EurekaServerApp.java4、启动EurekaServer二、构建部署 EurekaClient 应用ServiceHelloA,端口 82011、pom.xml2、bootstrap.properties3、ServiceHelloApp.java4、Ser...
1.Combobox下拉框1)获取下拉文本值$("#deptName").combobox("getText")2)获取下拉框的value$("#deptName").combobox("getValue")3)去掉下拉框的倒三角$(".combo").click(function(){ if ($(this).prev().combobox("pa...
1、preg_match_all —执行一个全局正则表达式匹配int preg_match_all( string $pattern , string$subject [, array&$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )搜索subje
丁琳,女,1981年4月出生,博士,副教授,硕士研究生导师,湖南省高校青年骨干教师,加拿大University of British Columbia访问学者,主要研究方向为网络安全与复杂网络。近五年来,主持国家自然科学基金、湖南省自然科学基金、湖南省哲学社会科学基金等国家级及省厅级科研课题7项,以第一作者身份在国内外重要学术期刊上发表科研论文10余篇,其中6篇被SCI/EI收录,参与编写教材1部...
缓冲区溢出新解题目链接:http://pwnable.kr/play.php 分析:该程序是一个64位的elf文件,运行程序.输入name,选择选项.hey, what's your name? : bill- select echo type -- 1. : BOF echo- 2. : FSB echo- 3. : UAF echo- 4. : exit大致流程就这样.看到有三个选项
因为在vue3项目中直接将原vue2中全局组件svg迁移时,完全按照vue2的写法,发现无法实现,所以就记录一下,方便日后查找1.安装npm install svg-sprite-loader -S2.配置文件vue.config.jsconst path = require('path')function resolve(dir) { return path.join(__dirname, dir)}module.exports={ chainWebpack: config =&
Centos 安装EMQX,使用自带的SSL,并用java验证centos7安装EMQXEMQ X的SSL1.证书转换,将 client-key.pem 转换成 pkcs8 格式的证书:2.修改emqx.conf配置3.emqtt重启4.mqtt.fx客户端测试java模拟SSL连接centos7安装EMQX使用EMQ官网,选择系统环境和安装方式,进行下载安装emqx broker使用指南中依赖包安装、特定版本安装、启动方式等命令。EMQ X的SSL/emqx/etc/certs里面存储自带的服
我是前言看开源代码时,总会看到一些大神级别的代码,给人眼前一亮的感觉,多数都是被淡忘的C语言语法,总结下objc写码中遇到的各类非主流代码技巧和一些妙用:[娱乐向]objc最短的方法声明[C]结构体的初始化[C]三元条件表达式的两元使用[C]数组的下标初始化[objc]可变参数类型的block[objc]readonly属性支持扩展的写法[C]小括号内联复合表达式[娱乐向]奇葩的C