python基础——面向对象的程序设计

python基础——面向对象的程序设计

 

1 什么是面向对象的程序设计

 

面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

 

优点是:极大的降低了程序的复杂度

 

缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。

 

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux内核,git,以及Apache HTTP Server等

 

 

 

面向对象的程序设计的核心是对象。对象(object)基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。

 

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反应到整体体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

 

缺点是:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程和结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即使是上帝也无法预测最终结果。

 

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

 

 面向对象的程序设计并不是全部。对于一个软件质量来说,面向对象的程序设计知识用来解决扩展性。

 

 

2 类和对象

 

对象(object)基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。

 

,可以看成种类,类型,从一组对象中提取到的相似部分。所有的对象都属于一个类,称为类的实例。

 

之前学习的数据类型就是类

print(int)
print(Garen)

输出结果:

<class 'int'>
<class '__main__.Garen'>

  

3 类  

3.1 初始类

 

1 声明类 (和声明函数很相似)

类的定义格式
class 类名:'类的文档字符串'类体

2 创建一个类:

class Data:pass

*Python编程中习惯类名使用单数单词并且首字母大写

 

类是数据与函数的结合,二者称为类的属性

class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;camp='Demacia'  #所有玩家的英雄(盖伦)的阵营都是Demacia;def attack(self,enemy):   #普通攻击技能,enemy是敌人;enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。

  

3.2 类的作用1:属性引用

属性引用(类名.属性)

(1)引用类的数据属性(类名.变量名)

print(Garen.camp)   # 引用类的数据属性,该属性与所有对象/实例共享

输出结果为:

Demacia

  

(2)引用类的函数属性(类名.函数名)

print(Garen.attack)   #引用类的函数属性,该属性也共享

输出结果为:

<function Garen.attack at 0x00000059CE8FAF28>

 

(3)类的属性操作

Garen.name='Garen1'    #增加属性
print(Garen.name)       #查询属性

输出结果为:

Garen1

 

del Garen.name         #删除属性print(Garen.name)

输出结果为:

AttributeError: type object 'Garen' has no attribute 'name' #报错

  

Garen.camp="aaaa"      #修改属性 
print(Garen.camp)

输出结果为:

aaaa

  

3.3 类的作用2:实例化 

(1)__init__实例化

类名加括号就是实例化,会自动触发__init__函数的运行,可以用他来为每个实例定制自己的特性

class Garen:camp='Demacia'def __init__(self,nickname,aggressivity=58,life_value=455):self.nickname=nickname  #为自己的盖伦起个别名;self.aggressivity=aggressivity #英雄都有自己的攻击力;self.life_value=life_value #英雄都有自己的生命值;def attack(self,enemy):print("attack %s" % enemy)

实例化:类名+括号

g1=Garen('草丛伦')

#就是在执行Garen.__int__(g1,’草丛伦’),然后执行__init__内的代码g1.nickname=’草丛伦’等

  

(2)self作用

self的作用是在实例化时自动将对象/实例本身传给__init__的第一个参数,self可以是任意名字,但是self是大家公认的。

 这种自动传递的机制还体现在g1.attack的调用上,后续会介绍

 

一:我们定义的类的属性到底存到哪里了?有两种方式查看

dir(类名):查出的是一个名字列表

类名.__dict__:查出的是一个字典,key为属性名,value为属性值

 

 二:特殊的类属性

类名.__name__# 类的名字(字符串)

类名.__doc__# 类的文档字符串

类名.__base__# 类的第一个父类(在讲继承时会讲)

类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)

类名.__dict__# 类的字典属性

类名.__module__# 类定义所在的模块

类名.__class__# 实例对应的类(仅新式类中)

  

4 对象(实例) 

对象是关于类而实际存在的一个例子,即实例

#类实例化得到g1这个实例

class Garen:camp='Demacia'def __init__(self,nickname,aggressivity=58,life_value=455):self.nickname=nickname  #为自己的盖伦起个别名;self.aggressivity=aggressivity #英雄都有自己的攻击力;self.life_value=life_value #英雄都有自己的生命值;def attack(self,enemy):print("attack %s" % enemy)g1=Garen('草丛伦')

  

4.1 对象的属性引用和绑定方法  

(1)对象(实例)只有一种作用:属性引用

格式: 实例名.类的变量名

       实例名.绑定方法

       实例名.实例自己的变量名

print(g1.nickname)
print(g1.aggressivity)
print(g1.life_value)

输出结果为:

草丛伦
58
455

 

(2)对象的属性操作

查看属性信息

print(g1.nickname)

输出结果:

草丛伦

  

修改属性信息

g1.nickname="伦哥"
print(g1.nickname)

输出结果为:

伦哥

  

添加属性

g1.sex="female"
print(g1.sex)

输出结果为:

Female

 

删除属性

del g1.sex
print(g1.sex)

输出结果为:

AttributeError: 'Garen' object has no attribute 'sex' #报错

  

(3)查看实例属性

同样是dir和内置__dict__两种方式

特殊实例属性

__class__

__dict__

 

(4)对象(实例)的绑定方法

对象本身只有数据属性,但是python的class机制会将类的函数绑定到对象上,称为对象的方法,或者叫绑定方法。

print(g1.attack)      #对象的绑定方法
print(Garen.attack)   #对象的绑定方法attack本质就是调用类的函数attack的功能,二者是一种绑定关系

输出结果为:

<bound method Garen.attack of <__main__.Garen object at 0x00000017370815F8>>
<function Garen.attack at 0x0000001737085048>

对象的绑定方法的特别之处在于:obj.func()会把obj传给func的第一个参数

  

4.2 对象的交互  

仿照Garen类创建一个Riven类:

实例Riven类

交互:瑞雯攻击草丛伦

class Riven:camp='Noxus'def __init__(self,nickname,aggressivity=54,life_value=414):self.nickname=nickname  #为自己的瑞雯起个别名;self.aggressivity=aggressivity #英雄都有自己的攻击力;self.life_value=life_value #英雄都有自己的生命值;def attack(self,enemy):print("attack %s" % enemy)enemy.life_value -= self.aggressivityg1=Garen('草丛伦')
r1=Riven('瑞雯')
print(g1.life_value)
r1.attack(g1)
print(g1.life_value)

输出结果为:

455
瑞雯 attack 草丛伦
401

 

转载于:https://www.cnblogs.com/niejinmei/p/6761854.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端 h5如何生成快捷方式_削微整理了几个经常在H5移动端开发遇到的东西

不用说我也知道&#xff0c;此类文章太多太多了&#xff0c;常见的譬如&#xff1a;viewport、强制浏览器全屏、IOS的Web APP模式、可点击元素出现阴影&#xff08;这个我觉得真没必要去掉&#xff0c;用户点击是需要反馈的&#xff0c;而这个背景色刚刚好提供了一种反馈&#…

SCI至上只是结果,而不是原因

来源&#xff1a;赵斌科学网博客我从来不认为SCI一无是处&#xff0c;相反&#xff0c;我们大多数科研人员应该感谢它。中国科研评价体系中的的问题&#xff0c;不是破四唯&#xff0c;破SCI至上&#xff0c;而是打破特权、消除歧视。近日&#xff0c;教育部和科技部联合发文&a…

spark mysql 交互_Spark - 直接操作数据源 MySQL

如果我们的Mysql服务器性能不咋滴&#xff0c;但是硬盘很够&#xff0c;如何才能做各种复杂的聚合操作&#xff1f;答案就是使用spark的计算能力的&#xff0c;我们可以将mysql数据源接入到spark中。读取val mysqlDF spark.read.format("jdbc").option("driver…

maven+SSM框架工程搭建

1.百度下载 maven 和 tomcat 安装 配置环境变量 2.使用最新版eclipse 集成maven maven conf文件夹下的settings.xml文件配置存放maven仓库的位置&#xff0c;D:\hongzhimei\repository 为存放路径 3.新建工程 项目原型选择webapp项目 在buildPath中选择Edit更改为工作空间默认的…

flask session_Flask干货:Flask数据交换——Session的使用

上一次我们学习了Cookie&#xff0c;知道Cookie是保存在客户端的。那么有的小伙伴就问了&#xff0c;难道只有客户端能保存&#xff1f;服务器就不可以保存吗&#xff1f;&#xff01;当然可以&#xff01;Session就是另一种记录用户状态的机制。Flask的Session是基于Cookie实现…

神经科学中的数学之美

来源&#xff1a;数学中国“不偏袒地讲&#xff0c;数学&#xff0c;不但掌握着真理&#xff0c;还是至美之物。”——罗素关于美学最新的神经学研究显示&#xff0c;视觉、听觉和道德上的美感体验都与“情绪化大脑”的同一个区域有关&#xff1a;内侧眶额叶皮层&#xff08;me…

手机端富文本编辑器_谷歌Pixel系列手机每月更新无痛刷机技巧

本文适合小白&#xff0c;高手可以关闭。&#xff08;以下技巧基本为Pixel3操作&#xff0c;window7平台&#xff0c;Pixel系列手机大同小异&#xff09;谷歌Pixel系列手机属于小众手机&#xff0c;当中刷机有技巧&#xff0c;本人也是小白&#xff0c;经过无数次的实践经验得出…

什么是数据中台?全面解读数据中台

来源&#xff1a;与数据同行伴随着云计算、大数据、人工智能等IT技术迅速发展及与传统行业实现快速融合&#xff0c;一场由数字化和智能化转型带来的产业变革正在孕育。随着企业规模不断扩大、业务多元化——中台服务架构的应运而生。“中台”早期是由美军的作战体系演化而来的…

add结果 bigdecimal_java.math.BigDecimal.add(BigDecimal augend)方法

全屏java.math.BigDecimal.add(BigDecimal augend)方法java.math.BigDecimal.add(BigDecimal augend) 返回一个BigDecimal&#xff0c;其值为(this augend)&#xff0c;其标度为 max(this.scale(), augend.scale())。声明以下是java.math.BigDecimal.add()方法的声明public Bi…

python导出oracle数据到excel_【python】 python 查询oracle数据生成excel

接上篇安装好了cx_Oracle.msi MySql.msi 下载安装 xlwt-0.7.5.tar.gz&#xff0c; 到安装目录下 命令窗口cmd下执行 python setup.py install即可 被引用的文件&#xff1a; # coding: utf-8 # xlswriter.py # http://pypi.python.org/pypi/xlwt import xlwt class XLSWriter(o…

指挥控制系统中的自然智能和人工智能

来源&#xff1a;人机与认知实验室【编者按&#xff1a;为什么美军的“深绿系统”不好用&#xff1f;并常常被指挥员所诟病。但这是指控系统智能化的关键之所在&#xff01;你也许会简单地说&#xff1a;“是人、机、环境系统失调造成的”&#xff0c;若进一步问“那是怎样失调…

Sublime Text 3 搭建 React.js 开发环境

Sublime有很强的自定义功能&#xff0c;插件库很庞大&#xff0c;针对新语言插件更新很快&#xff0c;配合使用可以快速搭建适配语言的开发环境。 1. babel-sublime 支持ES6&#xff0c; React.js, jsx代码高亮&#xff0c;对 JavaScript, jQuery 也有很好的扩展。关于 babel 的…

AI造假 vs AI打假 终结“猫鼠游戏”不能只靠技术

来源&#xff1a;和讯网人脸识别作为生物识别中的重要手段&#xff0c;成为了近年身份识别中最热门的领域。但与人脸识别技术共同发展的&#xff0c;还有借助机器学习系统、图像视频和音频内容&#xff0c;更改人脸、物体或环境呈现方式的深度伪造技术。随着这一技术的日趋成熟…

你好AI丨重读图灵经典之作,九条反驳意见引人深思

来源&#xff1a; AI科技评论编译 | 丛末、蒋宝尚当一台计算机能够骗过人类&#xff0c;让他们相信它就是一个人的时候&#xff0c;就能够被称作智能。编者按&#xff1a;对于艾伦图灵&#xff0c;相信大家都并不陌生&#xff0c;作为人工智能鼻祖&#xff0c;图灵的诸多观点即…

java 比较源文件_Beyond Compare比较Java源代码文件的操作方法

今天小编就带大家来共同学习BeyondCompare如何比较Java源代码文件希呢?望可以帮助到有需要的小伙伴哦&#xff0c;下面就是详细完整的操作步骤。打开BeyondCompare&#xff0c;在主页面左侧目录下选择文本比较会话&#xff0c;打开会话操作界面。分别单击比较会话界面“打开文…

关于研究的方法

转载于:https://www.cnblogs.com/freedommovie/p/6769717.html

【学术快报】韩世辉课题组在《eLife》发表论文揭示群体冲突中复仇的神经生物学机制...

来源&#xff1a;脑科学在群体冲突中&#xff0c;看到对手伤害自己的队友会激发报复行为&#xff0c;去攻击对手。这一复杂社会行为贯穿人类历史&#xff0c;阐明其机理具有重要科学意义和社会价值。心理学研究提出对“内群体的爱”&#xff08;ingroup love&#xff09;或/和对…

《面向对象程序设计》课程作业二

github链接作业链接编写一个程序&#xff0c;要求根据给定的圆的半径求圆的面积&#xff0c;并将求得的结果打印出来。……建立一个工程&#xff0c;将程序写成两个.cpp和一个.h的形式。 这个问题倒是没什么难的&#xff0c;但对于同学们来说是一个上手模块化的好开端。从现在开…

报告 | 超级智能城市2.0 – 人工智能引领新风尚(附下载)

来源&#xff1a;智慧城市决策参考未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联…

icmp协议_ICMP协议【41】

1、回顾TCP/IP协议栈为了更有效地转发IP数据报和提高交付成功的机会......2、ICMP协议的简介(1)ICMP&#xff0c;全称为Internet Control Message Protocol&#xff0c;即网际控制报文协议、网际控制消息协议。(2)它是TCP/IP协议族的一个子协议&#xff0c;用于在IP主机、路由器…