1、面向对象的引入

 def Person(*args):
'''
定义一个人
:param args: 人的属性
:return: 人的所有属性的字典
'''
info = {}
info['name'] = args[0]
info['age'] = args[1]
info['hp'] = args[2]
info['aggr'] = args[3] def fight(info, dog):
'''
人打
:param person:一个具体的人
:param dog: 一只具体的狗
:return:
'''
dog[ 'hp' ] -= info[ 'aggr' ] return info,fight def Dog(*args):
'''
定义一个狗
:param args: 狗的属性
:return: 狗的所有属性的字典
'''
info = {}
info[ 'name' ] = args[ 0 ]
info[ 'hp' ] = args[ 1 ]
info[ 'aggr' ] = args[ 2 ] def bite(info, person):
'''
狗咬
:param dog: 哪只狗
:param person: 哪个人
:return:
'''
person[ 'hp' ] -= info[ 'aggr' ]
return info,bite # 代码精简了 方便增加人物 方便修改 人物更加规范 —— 人模子 p_tupl = Person('tom',18, 500, 100) d_tupl = Dog('wancai',300, 150) # todo 如果将bite和fight放在此处,人狗的行为可能混乱@
# print('被咬前:', tom)
# bite(wancai, tom)
# print('被咬后:',tom)
#
# print('被打前:', wancai)
# fight(tom, wancai)
# print('被打后:',wancai)
#
# # 人也可以咬狗,不合理!于是将咬的方法放入Dog函数中!打的方法也一样!
# #bite(tom, wancai) tom = p_tupl[0]
wancai = d_tupl[0] print('被咬前:', tom)
d_tupl[1](wancai, tom)
print('被咬后:',tom) print('被打前:', wancai)
p_tupl[1](tom, wancai)
print('被打后:',wancai) # 面向对象编程
# 所谓模子 就是 类 抽象的 我能知道有什么属性 有什么技能 但不能知道属性具体的值
# jin alex nezha 就是对象 有具体的值,属性和技能都是根据类规范的

2、初识面向对象

 # 用对象模拟人狗大战

 '''
人类
'''
class Person: # 类名
coutry = 'PRC' # 创造了一个只要是这个类就一定有的属性
# 类属性 静态属性
def __init__(self, *args): # 初始化方法,self是对象,是一个必须传的参数
self.name = args[0] # self就是一个可以存储很多属性的大字典
self.age = args[1] # 往字典里添加属性的方式发生了一些变化
self.hp = args[2]
self.aggr = args[3] def fight(self, dog): # 方法,一般情况下必须传self参数,且必须写在第一个
''' # 后面还可以传其他参数,是自由的
人打
:param person:一个具体的人
:param dog: 一只具体的狗
:return:
'''
dog.hp -= self.aggr '''
狗类
'''
class Dog:
def __init__(self, *args):
self.name = args[ 0 ]
self.hp = args[ 1 ]
self.aggr = args[ 2 ] def bite(self, person):
'''
狗咬
:param dog: 哪只狗
:param person: 哪个人
:return:
'''
person.hp -= self.aggr tom = Person('tom',18, 500, 100) # 类名还可以实例化对象,alex对象 # 实例化
print(tom.coutry) # 类名 可以查看类中的属性,不需要实例化就可以查看
wancai = Dog('wancai',300, 150) print(tom.age, tom.hp) # 查看属性值 print('被咬前:', tom.__dict__) # 查看所有属性
wancai.bite( tom) # 调用方法 类名.方法名(对象名)
print('被咬后:',tom.__dict__)
#
print('被打前:', wancai.__dict__)
tom.fight(wancai)
print('被打后:',wancai.__dict__) # 对象 = 类名()
# 过程:
# 类名() 首先 会创造出一个对象,创建了一个self变量
# 调用init方法,类名括号里的参数会被这里接收
# 执行init方法
# 返回self
# 对象能做的事:
# 查看属性
# 调用方法
# __dict__ 对于对象的增删改查操作都可以通过字典的语法进行
# 类名能做的事:
# 实例化
# 调用方法 : 只不过要自己传递self参数
# 调用类中的属性,也就是调用静态属性
# __dict__ 对于类中的名字只能看 不能操作

Python进阶-XIV 面向对象初步的更多相关文章

  1. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  2. Python进阶(十三)----面向对象

    Python进阶(十三)----面向对象 一丶面向过程编程vs函数式编程vs面向对象编程 面向过程: ​ 简而言之,step by step 一步一步完成功能,就是分析出解决问题所需要的步骤,然后用函 ...

  3. Python进阶之面向对象编程

    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  4. Python进阶之面向对象编程(二)

    Python面向对象编程(二) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  5. Python进阶之面向对象编程概述

    Python面向对象编程(一) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  6. Python 进阶_OOP 面向对象编程_组合与继承

    #目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...

  7. Python 进阶_OOP 面向对象编程_实例属性和方法

    目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可 ...

  8. Python 进阶_OOP 面向对象编程_类和继承

    目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...

  9. python进阶之面向对象初识

    面向对象 不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题. 通过下面的例子来初步了解面向对象的编程方式. class Person: # ...

随机推荐

  1. 洛谷 P2656 (缩点 + DAG图上DP)

    ### 洛谷 P2656 题目链接 ### 题目大意: 小胖和ZYR要去ESQMS森林采蘑菇. ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇.小胖 ...

  2. vue开发 element的select下拉框设定初值后,不能重新选择的问题

    问题描述: 用的element的select可多选的下拉选框,在回显后有初始值的情况下,不能修改,也不能再选择 如图,明明点击了一般内勤主管,但没有任何反应 <el-select v-model ...

  3. Anaconda--在虚拟环境中安装CUDA and cudnn

    在conda虚拟环境中安装CUDAconda install cudatoolkit=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs ...

  4. 由OSS AccessKey泄露引发的思考

    什么是OSS? 对象存储服务(Object Storage Service,OSS)是一种海量.安全.低成本.高可靠的云存储服务,适合存放任意类型的文件.容量和处理能力弹性扩展,多种存储类型供选择,全 ...

  5. Enum.GetValues(),返回System.Array的一个实例

    Array enumData = Enum.GetValues(e.GetType()); Console.WriteLine("This enum has {0} members.&quo ...

  6. Python - 正则表达式2 - 第二十三天

    Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. ...

  7. jenkins19年最新最管用的汉化

    今天准备学学jenkins ,官方下载了一个最新版本,发现是英文版,网上找个许多汉化方式,几乎都是一种,下载插件 :Locale plugin ....很尴尬,下载完了还是没有汉化 ,是不是jenki ...

  8. windows小乌龟和git使用

    一.安装git for windows 首先下载git for windows客户端http://msysgit.github.io/ 安装过程没什么特别的,不停next就ok了     图太多就不继 ...

  9. 2019 奥买家java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.奥买家等公司offer,岗位是Java后端开发,因为发展原因最终选择去了奥买家,入职一年时间了,也成为了面试官 ...

  10. C#中将long浮点数格式化为{H:min:s.ms}格式的字符串的方法

    场景 表示时间的数据格式为浮点数,如下: 需要将其格式化为{H:min:s.ms}格式的字符串,效果如下: 注: 博客主页:https://blog.csdn.net/badao_liumang_qi ...