python 之路 面向对象
---恢复内容开始---
一切 万物皆对象。
面向对象其实只是一种编程方式。面向对象式编程可以在很大程度上帮助我们节省时间内存,等问题是我们的代码简单明了。
那么首先定义的格式为class
class game:
n="woshi n"
name="wocao"
def __init__(self, name, job, wuqi, money = 450,blood=100):
# 构造函数
# 在实例化时做一些类的初始化工作
self.name = name # 实例变量(静态属性) 作用域就是实例本身
self.job = job
self.wuqi = wuqi
self.money = money
self.blood = blood def buy_gun(self, gun_name): # 类的方法 (功能)动态属性
self.wuqi = gun_name
print("%s - %s - %s money:%s blood: %s" % (self.name, self.job, self.wuqi, self.money, self.blood)) liqing = game('liqing','please','xxx')
liqing.buy_gun('ak47')
liqing.name='liushuyuan' # 由此看出 先找实例 在找类变量
liqing.buy_gun('ak47')
构造函数就是为了在实例化的时候为变量赋值
那么假如
当类已经构建完毕 我有想加一个属性呢?
答案显然是可以的 这就取决于你是想给类变量赋值还是给实例变量赋值了
并且现在还有一个问题,当类变量和实例变量相同时我们在修改的时候都是r1.name时会发生什么呢
liqing.name='liushuyuan' # 由此看出 先找实例 在找类变量
liqing.buy_gun('ak47')
# 重新赋值
# 当类已经构建完毕 我有想加一个属性呢?
liqing.xuemaojiao = " 喵喵喵"
print(liqing.xuemaojiao)
如上面代码所示,先找实例 在找类变量是我们的准则
并且属性的增删改查都可以实现
1.2析构函数
析构函数和构造函数的作用相反
析构函数:在实例释放和销毁的时候执行通常做一些扫尾工作如关闭一些数据库链接打开的临时文件
def __del__(self): # 析构方法 在程序结束的时候被默认执行(自动)
print("彻底死了")
我们看一个完整的代码
class game:
n="woshi n"
name="wocao"
def __init__(self, name, job, wuqi, money = 450,blood=100):
# 构造函数
# 在实例化时做一些类的初始化工作
self.name = name # 实例变量(静态属性) 作用域就是实例本身
self.job = job
self.wuqi = wuqi
self.money = money
self.blood = blood
def __del__(self): # 析构方法 在程序结束的时候被默认执行(自动)
print("彻底死了")
def buy_gun(self, gun_name): # 类的方法 (功能)动态属性
self.wuqi = gun_name
print("%s - %s - %s money:%s blood: %s" % (self.name, self.job, self.wuqi, self.money, self.blood)) liqing = game('liqing','please','xxx')
liqing.buy_gun('ak47')
那么结构是这样的
liqing - please - ak47 money:450 blood: 100
彻底死了
现在 作用效果显而易见了
1.3私有属性
假如你设计了一个游戏,你的血量如果在外面可以任意改的时候,你这个游戏就会被别人的一句代码给你直接写死了这个游戏还玩个毛线啊
那么此时私有属性就出来了 ,顾名思义私有属性就是只能在内部修改,方法为在变量前面加上两条下划线。
当我的属性(变量)不想被外面调用时我就可以用到这种方法
class cs:
def __init__(self, name, age, wuqi, blood=100):
self.__name = name
self.age = age
self.wuqi = wuqi
self.__blood = blood
def shoot(self):
self.__blood = self.__blood-20 r1 = cs('liqing','6','ak47')
r1.shoot()
如代码所示当标记为私有变量的时候 从外部不能访问 只能内部调用
1.4私有方法
私有方法也是在函数名前加上两个下划线
2.1继承
我们的代码就是要尽量减少重复代码,那么当多个类都有相同的代码时我们又用什么方法来解决呢
那么就是继承了
子类可以继承父类的所有东西,并且还可以对父类的方法重新构建。
class People:
def __init__(self, name, age, word):
self.name=name
self.age=age
self.word=word def jiao(self):
print('我们一起学猫叫')
class man(People):
def jiao_(self):
print("我是男人")
People.jiao(self)
print("piao piao piao") r1 = man('liqing', 6, 'china')
r1.jiao_()
此时我在man方法种就可以任意的调用父类中的方法了
那么当我子类的方法名称于父类相同时,优先执行子类的方法
如代码所示我们如果先对父类的方法重新增加功能的话就需要People.jiao()
然后在增加就可以了。
2.2对构造函数进行重构
def __init__(self, name, age, word, money):
People.__init__(name, age, word)
self.money = money
# 或者
super(man,self).__init__(name, age, word)
3.1新式类与经典类
# class people: # 经典类
class people(object): # 新式类 super(people, self).__init__() 新式类写法
多继承。。。。。。。。待更新
python 之路 面向对象的更多相关文章
- python之路----面向对象的多态特性
多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstr ...
- 百万年薪python之路 -- 面向对象之继承
面向对象之继承 1.什么是面向对象的继承 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 通俗易懂的理解是:子承父业,合法继承家产 专业的理解是:子类可以完全使用父类的方法和属 ...
- python之路——面向对象(进阶篇)
面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) class City: # 静态字段 countr ...
- python之路——面向对象(基础篇)
面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类&quo ...
- python之路——面向对象
面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...
- python之路--面向对象(三)
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象.由于Python中一切都是类,所以 ...
- python之路---面向对象编程(二)
类的继承 1.在python3中,只有新式类,新式类的继承方式为:广度优先.而python2中,经典类的继承方式为:深度优先.那么我们来看看深度优先和广度优先的区别吧 如下图,为类之间的继承关系.B, ...
- python之路---面向对象编程(一)
一.设计思想的发展 面向机器(代码复杂,效率低,学习成本高,开发周期长)-------->面向过程(扩展性差,不适用多变的需求改变)----------->面向对象(扩展性好,但是可控性差 ...
- python之路----面向对象进阶一
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() i ...
- python之路----面向对象中的内置函数
property属性 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法 ...
随机推荐
- JS中实现Trim(),TrimStart(),TrimEnd() 的方法
//去除字符串头尾空格或指定字符 String.prototype.Trim = function (c) { if (c == null || c == "") { var st ...
- CentOS 7操作系统目录结构介绍
CentOS 7操作系统目录结构介绍 操作系统存在着大量的数据文件信息,相应文件信息会存在于系统相应目录中,为了更好的管理数据信息,会将系统进行一些目录规划,不同目录存放不同的资源. 根下目录结构说明 ...
- 【水】怎么在 HZOI 上水到更高的分
前言 这些东西在联赛并用不了 预编译优化 40行优化 #define _CRT_SECURE_NO_WARNINGS #pragma GCC optimize(2) #pragma GCC optim ...
- jmeter_02_目录文档说明
jmeter目录文档说明 bin目录是可执行文件 jmeter.bat 是启动文件 可以启动jmeter. 使用notpad++ 等文本编辑器打开 bat文件 可以配置jvm的参数 比如堆内存[Hea ...
- JS获取DropDownList选择项的值
var dropDownList= document.getElementById("<%=DropDownListID.ClientID %>");//获取DropD ...
- 第五章 Linux操作系统关机、重启、注销及其查看ip命令
一.更新系统时间与网络时间同步 1. 安装ntpdate工具 # yum -y install ntp ntpdate 2. 设置系统时间与网络时间同步 # ntpdate cn.pool.ntp ...
- JS里各种类型的循环
for... for( 初始条件; 判断条件; 递增条件 ) { ... } for ... in 可以把一个对象里面的所有属性依次循环出来 var person = { name: 'Jack', ...
- python3异步爬虫 ——aiohttp模板使用
一.简单使用和讲解 import aiohttp import asyncio async def fetch(client): async with client.get('http://httpb ...
- 论文解读《Deep Resdual Learning for Image Recognition》
总的来说这篇论文提出了ResNet架构,让训练非常深的神经网络(NN)成为了可能. 什么是残差? "残差在数理统计中是指实际观察值与估计值(拟合值)之间的差."如果回归模型正确的话 ...
- 创建本地yum源
1. 环境准备 在准备搭建yum源的服务器上安装createrepo,打开防火墙的80端口或者关闭防火墙. 注:createrepo命令只要不是最小化安装,都是支持的.如果是最小化安装,下载下图下载r ...