---恢复内容开始---

一切  万物皆对象。

面向对象其实只是一种编程方式。面向对象式编程可以在很大程度上帮助我们节省时间内存,等问题是我们的代码简单明了。

那么首先定义的格式为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 之路 面向对象的更多相关文章

  1. python之路----面向对象的多态特性

    多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstr ...

  2. 百万年薪python之路 -- 面向对象之继承

    面向对象之继承 1.什么是面向对象的继承 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 通俗易懂的理解是:子承父业,合法继承家产 专业的理解是:子类可以完全使用父类的方法和属 ...

  3. python之路——面向对象(进阶篇)

    面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) class City: # 静态字段 countr ...

  4. python之路——面向对象(基础篇)

    面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类&quo ...

  5. python之路——面向对象

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  6. python之路--面向对象(三)

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象.由于Python中一切都是类,所以 ...

  7. python之路---面向对象编程(二)

    类的继承 1.在python3中,只有新式类,新式类的继承方式为:广度优先.而python2中,经典类的继承方式为:深度优先.那么我们来看看深度优先和广度优先的区别吧 如下图,为类之间的继承关系.B, ...

  8. python之路---面向对象编程(一)

    一.设计思想的发展 面向机器(代码复杂,效率低,学习成本高,开发周期长)-------->面向过程(扩展性差,不适用多变的需求改变)----------->面向对象(扩展性好,但是可控性差 ...

  9. python之路----面向对象进阶一

    一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() i ...

  10. python之路----面向对象中的内置函数

    property属性 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法 ...

随机推荐

  1. 动画演示Sunday字符串匹配算法——比KMP算法快七倍!极易理解!

    前言 上一篇我用动画的方式向大家详细说明了KMP算法(没看过的同学可以回去看看). 这次我依旧采用动画的方式向大家介绍另一个你用一次就会爱上的字符串匹配算法:Sunday算法,希望能收获你的点赞关注收 ...

  2. ttl转以太网

    ttl转以太网 ttl转以太网ZLSN3007S是实现TTL电平串口转以太网的"超级网口",产品自带网络变压器和RJ45网口,可以方便实现单片机.各类TTL电平串口设备的联网.首先 ...

  3. day49 Pyhton 数据库Mysql 06

    多表查询 连表查询 要进行连接,那一定涉及两个表,两个表中要有关联条件才能进行连接 内连接 只有表一和表二中的连接条件都满足的时候才能显示出来 inner join on /where 条件 sele ...

  4. hugo主题文档-manpassant

    +++ date="2020-10-17T10:32:00+08:00" title="hugo主题文档manpassant" tags=["hugo ...

  5. ansible使用script模块在受控机上执行脚本(ansible2.9.5)

    一,ansible的script模块的用途 script 模块用来在远程主机上执行 ansible 管理主机上的脚本, 即:脚本一直存在于 ansible 管理主机本地, 不需要手动拷贝到远程主机后再 ...

  6. xpath教程-逐层检索和全局检索 转

    逐层检索和全局检索 布啦豆 11203   本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个 ...

  7. Django ORM Queryset 的缓存机制, 惰性查询简述

    在Django的ORM中 必须注意由于QuerySet的 cache导致的数据获取不正确的问题 在哪些情况下不会出发QuerySet缓存? 隐式存储QuerySet(查询语句没有显示赋值给变量而直接进 ...

  8. Java9系列第7篇:Java.util.Optional优化与增强

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  9. 面试题 02.02. [链表][双指针]返回倒数第 k 个节点

    面试题 02.02. 返回倒数第 k 个节点 方法一:使用外部空间 // 执行用时: 1 ms , 在所有 Java 提交中击败了 16.75% 的用户 // 内存消耗: 36.8 MB , 在所有 ...

  10. centos7启用EPEL Repository

    1,下载库文件 http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm 2,安装 r ...