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是计算而来的,但很明显它听起来像是一个属性而非方法 ...
随机推荐
- 协同开发功能——Github团队协作
最近需要写一个HoloLens开发的简明介绍,其中要测试几个demo.用到github以团队协作,像下面是简单的事件记录. 一.创建项目 1. 2.项目设置 名称 描述description Init ...
- golang xpath解析网页
https://github.com/antchfx/htmlquery package main import ( "fmt" "github.com/antchfx/ ...
- spring boot:用dynamic-datasource-spring-boot-starter配置多数据源访问seata(seata 1.3.0 / spring boot 2.3.3)
一,dynamic-datasource-spring-boot-starter的优势? 1,dynamic-datasource-spring-boot-starter 是一个基于springboo ...
- linux查看登录用户
[root@localhost ~]# w 11:01:06 up 3 days, 12:40, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FRO ...
- pv操作是否会造成死锁呢?
看了一些pv操作的例子,有一些基本原理不是想得很清楚. 有一个进程 while(true) { p(s); ...... v(s); } s的初值为1. 那么我的问题是,当多个该进程需要执行时,是否会 ...
- C#语言下使用gRPC、protobuf(Google Protocol Buffers)实现文件传输
初识gRPC还是一位做JAVA的同事在项目中用到了它,为了C#的客户端程序和java的服务器程序进行通信和数据交换,当时还是对方编译成C#,我直接调用. 后来,自己下来做了C#版本gRPC编写,搜了很 ...
- mysql query cache 查询缓存
查看本博文,并进行验证(验证结果与博文一致): https://blog.csdn.net/carmazhao/article/details/7088530 mysql默认是开启查询缓存的. 设置查 ...
- 批量安装Zabbix_Agent
使用自动化部署工具Ansible批量部署zabbix_agent. 1. 安装Ansible yum –y install ansible 内网情况下,现在ansible及其依赖的rpm包,添加到yu ...
- STM32入门系列-启动文件介绍
在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...
- ASP.NET Core Authentication系列(一)理解Claim, ClaimsIdentity, ClaimsPrincipal
前言 首先我们来看一下在ASP.NET时代,Authentication是如何使用的.下面介绍的是System.Web.Security.FormsAuthentication: // 登录 Syst ...