1.25 Python知识进阶 - 封装
封装
示例代码:
class Role(object):
count = 0 def __init__(self,name,role,weapon,life_value=100,money=15000): self.name = name self.role = role self.weapon = weapon self.life_value = life_value self.money = money
self.__heart = "normal"
def shot(self): print("shooting...")
def got_shot(self): print("ah...,I got shot...")
self.__heart = 'Die'
def buy_gun(self,gun_name): print("just bought %s" %gun_name)
r1 = Role('Alex','police','AK47’) #生成一个角色 r2 = Role('Jack','terrorist','B22’) #生成一个角色
分析代码
构造方法:函数__init__称为构造函数,或构造方法,用于执行类的实例的初始化工作。
析构方法:函数__del__称为析构函数,或析构方法,用于实现销毁类的实例所需要的操作。通过del语句,可强制销毁一个对象实例。
实例方法:又称为公有方法。类方法的第一参数一般为self,这种方法称为实例方法。像shot函数都是实例的方法,如果写成__shot就是私有方法。变成私有方法,就不能直接访问,但是可以在其他方法中访问。
属性:类的数据成员是在类中定义的成员变量,用来存储描述类的特征的值。
实例属性:通过self.变量名定义的属性,称为实例属性,也称为实例变量,成员属性,成员变量。示例代码中,在构造方法__init__中定义的self.name等就是实例属性。
初始化:
一般在__init__方法中初始化
self.实例变量名 = 初始值
访问:
在其他函数中访问:
self.实例变量名 = 值 # 写入
self.实例变量名 # 读取
在通过对象实例访问:
obj1 = 类名() # 创建对象实例
obj1.实例变量名 = 值 # 写入
obj1.实例变量名 # 读取
私有属性:通常,以两个下划线开头,但是不以两个下划线结束的属性称为私有属性。私有属性不能直接被访问,但是可以在方法中访问。示例代码中,self.__heart就是私有属性,只能在方法中进行调用。
强制访问方法:r1._Role__heart 就可以在外部访问到
类属性:声明属于类本身的变量,即类的属性,也称为类变量、静态属性,有的称它是公有属性。示例代码中,count就是类的属性
初始化:
类变量名 = 初始值
访问:
类名.类变量名 = 值 # 写入
类名.类变量名 # 读取
知识框架

1.25 Python知识进阶 - 封装的更多相关文章
- 1.23 Python知识进阶 - 面向对象编程
一.编程方法 1.函数式编程:"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论.它属于"结构化 ...
- 1.26 Python知识进阶 - 继承
继承 继承(Inheritance)是面向对象的程序设计中代码重要的主要方法.继承是允许使用现有类的功能,并在无需重新改写原来的类的情况下,对这些功能进行扩展.继承可以避免代码复制和相关的代码维护等问 ...
- 1.24 Python知识进阶 - 类与对象
类 语法格式: class Dog(object): print("the dog is barking ...") Dog为类名,object为要继承的基类,Dog类会从基类ob ...
- 第4章 基础知识进阶 第4.1节 Python基础概念之迭代、可迭代对象、迭代器
第四章 基础知识进阶第十七节 迭代.可迭代对象.迭代器 一. 引言 本来计划讲完元组和字典后就讲列表解析和字典解析,但要理解列表解析和字典解析,就需要掌握Python的高级的类型迭代器,因此本节 ...
- Python进阶-XVII 非python的接口类、多态、python自己的封装
1.python模拟java中的接口类 python中是没有接口类的概念的,因为它支持多继承,但是java不能,所以就提出一个接口类的概念 java : 面向对象编程 设计模式 —— 接口 接口类 : ...
- Python爬虫进阶一之爬虫框架概述
综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...
- python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))
首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...
- python学习大全:python基础进阶+人工智能+机器学习+神经网络
首先用数据说话,看看资料大小,达到675G承诺:真实资料.不加密.(鉴于太多朋友加我QQ,我无法及时回复,) 方便的朋友给我点赞.评论下,谢谢!(内容较大,多次保存) [hide]链接:[url]ht ...
- Python爬虫进阶四之PySpider的用法
审时度势 PySpider 是一个我个人认为非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇内容通过跟我做一个好玩的 ...
随机推荐
- ArcGIS api for javascript——设置可见的比例
描述 ArcGIS JavaScript API的1.2版本加入更多地图如何缓存,切片和地图服务的控制.本例展示了如何限制地图能够接收切片的比例等级.如果不想用户过分的放大或缩小,即使切片存在这些极端 ...
- BNU 34974 MATLAB大法好
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=34974 MATLAB大法好 Time Limit: 8000ms Memory Limi ...
- POJ 1088: 滑雪(经典 DP+记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996 Accepted: 27818 Description ...
- RvmTranslator7.0-IFC
RvmTranslator7.0-IFC eryar@163.com RvmTranslator can translate the RVM file exported by AVEVA Plant( ...
- Java中Socket上的Read操作堵塞问题
从Socket上读取对端发过来的数据一般有两种方法: 1)依照字节流读取 BufferedInputStream in = new BufferedInputStream(socket.getInpu ...
- codeforces 558E A Simple Task 线段树
题目链接 题意较为简单. 思路: 由于仅仅有26个字母,所以用26棵线段树维护就好了,比較easy. #include <iostream> #include <string> ...
- Centos7 zabbix3.4.6的安装部署 (二)
接着安装zabbix客户端 直接安装在服务器上 监控服务器 ip 192.168.161.25 yum -y install zabbix-agent #通过Yum安装zabbix客户端 接着配置za ...
- 【转载】jQuery弹出层始终垂直居中于当前屏幕
一般网站上肯定有一些弹出框,不论弹出框的大小,都需要他在当前窗口垂直居中.之前手上就有一个jQuery的例子,后来才发现,他只能在第一屏垂直居中,如果滑动滚动条,弹出的框就在上方,不是很方便.请教朋友 ...
- .Net视图机制
.Net会有默认的约定. HomeController下面的Index,会默认渲染Home/Index.cshtml. 当然可以设置成别的,比如设置成About. using System; usin ...
- vue -- 动态加载组件 (tap 栏效果)
在 vue 中,实现 Tab 切换主要有三种方式:使用动态组件,使用 vue-router 路由,使用第三方插件. 因为这次完成的功能只是简单切换组件,再则觉得使用路由切换需要改变地址略微麻烦,所以使 ...