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是计算而来的,但很明显它听起来像是一个属性而非方法 ...
随机推荐
- SQl编程存储过程
过程化存储 存储过程,一组为完成特定功能.经过编译后存储在数据库中的SQL语序集 灵活性:存储过程中可以进行流程控制和循环操作来完成复杂的判断和运算 一致性:通过存储过程可以使一些关联的操作一起发生, ...
- jquery的实时触发事件(textarea实时获取中文个数)
jquery的实时触发事件(textarea实时获取中文个数) (2014-09-16 11:49:50) 转载▼ 标签: 实时触发事件 中文个数 onpropertychange oninput o ...
- jmeter_04_常用取样器
目录 常用取样器详解 http取样器 1.1 基本配置 1.2 高级配置 jdbc取样器 2.1 JDBC Connection Configuration 2.1.1 **Variable Name ...
- 详解GaussDB(DWS) explain分布式执行计划
摘要:本文主要介绍如何详细解读GaussDB(DWS)产生的分布式执行计划,从计划中发现性能调优点. 前言 执行计划(又称解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的 ...
- 前端基础——HTML(二)
HTML标签 标题标签<h1>.<h2>.<h3>.<h4>,标题标签之间是不能嵌套的,下一级标题与上级标题之间通过同级 关于书写,下级标题解释说明的是 ...
- 赛门铁克和DigiCert证书有什么区别?
在众多国人眼里,赛门铁克Symantec名气更胜于DigiCert证书.但是,我们知道2017年赛门铁克因一系列原因被DigiCert收购,品牌名称也被更新为DigiCert Secure Site. ...
- npm ande gulp cmd
在学习前,先谈谈大致使用gulp的步骤,给读者以初步的认识.首先当然是安装nodejs,通过nodejs的npm全局安装和项目安装gulp,其次在项目里安装所需要的gulp插件,然后新建gulp的配置 ...
- c语言创建dll以及使用
0x01. declspec(dllexport)创建导出dll 笔者这边使用vs 2015,但是性质都一样的 新建项目 -> Win32控制台应用程序 -> dll 这时候就创建了一个项 ...
- Flink1.9.2源码编译和使用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 03 . Gin+Vue开发一个线上外卖应用(用户数据创建,插入,跨域处理)
功能和背景介绍 在项目的登录功能中,如果在登录时发现用户名和密码在用户表中不存在,会自动将用户名和密码保存在用户表中,创建一个新的用户. 因此,除了使用手机号和验证码登录以外,还支持使用用户名.密码进 ...