Python进阶-XIV 面向对象初步
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 面向对象初步的更多相关文章
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- Python进阶(十三)----面向对象
Python进阶(十三)----面向对象 一丶面向过程编程vs函数式编程vs面向对象编程 面向过程: 简而言之,step by step 一步一步完成功能,就是分析出解决问题所需要的步骤,然后用函 ...
- Python进阶之面向对象编程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- Python进阶之面向对象编程(二)
Python面向对象编程(二) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...
- Python进阶之面向对象编程概述
Python面向对象编程(一) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...
- Python 进阶_OOP 面向对象编程_组合与继承
#目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...
- Python 进阶_OOP 面向对象编程_实例属性和方法
目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可 ...
- Python 进阶_OOP 面向对象编程_类和继承
目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...
- python进阶之面向对象初识
面向对象 不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题. 通过下面的例子来初步了解面向对象的编程方式. class Person: # ...
随机推荐
- Paper | Multi-scale Dense Networks for Resource Efficient Image Classification
目录 故事背景 方法 两种加速策略 网络设计 网络优化 失败设计 回头品味 实验 数据集和数据处理 结果 第二次阅读 本文不是第一个提出early exit思想的 写作流畅 网络回顾 其他 发表在IC ...
- 全面理解UE4委托
UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到通知,并进行相 ...
- JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?
1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...
- [SpingBoot guides系列翻译]Redis的消息订阅发布
Redis的消息 部分参考链接 原文 CountDownLatch 概述 目的 这节讲的是用Redis来实现消息的发布和订阅,这里会使用Spring Data Redis来完成. 这里会用到两个东西, ...
- 转载-用excel批量生成insert语句
用excel批量生成insert语句 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/h ...
- 将Excel表格数据转换成Datatable
/// <summary> /// 将Excel表格数据转换成Datatable /// </summary> /// <param name="fileUrl ...
- 微软开放了.NET 4.5.1的源代码【转】
.NET Reference Source发布了beta版,可以在线浏览.NET Framework 4.5.1的源代码,并且可以通过配置,在Visual Studio 2013中调试.NET Fra ...
- 数据持久化之bind Mounting
一.默认情况 1.创建一个Nginx测试镜像 Dockerfile: FROM nginx:latest WORKDIR /usr/share/nginx/html COPY index.html i ...
- Kubernetes configMap(配置文件存储)
Kubernetes configMap(配置文件存储) 官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure ...
- git同步本地数据到github——第一次使用和以后使用
git作为版本控制工具十分的好用,但是在使用的过程中,会因为仓库版本的不同步出现很多错误 一.git简单的原理交互模型 从下面的model中我们看到在不创建分支情况下始终是远程的origin和本地的m ...