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: # ...
随机推荐
- js将内容复制到剪贴板
有一需求,点击按钮要将某个值复制到剪贴板. 第一种,代码如下: <div cols="20" id="biao1">12345678</div ...
- 记一次SQL调优
insert优化 如果你在某一时刻有大量的insert操作,一条一条插入是非常耗时的.insert语句本身支持一次插入很多条记录,插入记录数上限受sql语句长度限制,一般一次插个几千条是没问题的.在我 ...
- matplotlib画图相关
一. plt显示一副图像 1. import matplotlib.pyplot as plt 2. plt.figure() # 图像名称 3. plt.ims ...
- IL 语法分析
Managed Heap: GC auto manage. One process, One heap. Call Stack: Runtime auto manage, every time whe ...
- consul实现kubernetes-1.15集群master的高可用访问实现
1.准备consul环境,参考我之前的博客实现或参考consul的官网部署最新的consul. 2.本次测试使用的是kubernetes-1.15.0 3.初始化集群 1)准备初始化文件 contro ...
- LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
题目 我是按照边进行二分的 class Solution { public: int sum[100005]; int a[305][305]; int maxSideLength(vector< ...
- LinuxShell——特殊符号
LinuxShell——特殊符号 摘要:本文主要学习了Shell命令中具有特殊功能的一些符号. 多命令执行 顺序执行“;” 如果使用“;”连接多条命令,那么这些命令会依次执行,但是各命令之间没有任何逻 ...
- jvm默认的并行垃圾回收器和G1垃圾回收器性能对比
http://www.importnew.com/13827.html 参数如下: JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xss256k -XX:M ...
- MQ选型对比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息队列框架选哪个?
最近研究消息队列,发现好几个框架,搜罗一下进行对比,说一下选型说明: 1)中小型软件公司,建议选RabbitMQ.一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便.不考虑r ...
- 【初识Spring】对象(Bean)实例化及属性注入(xml方式)
title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...