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: # ...
随机推荐
- 周董新歌搞崩QQ,抓取20W评论看看歌迷在说啥
9 月 16 日晚间,周董在朋友圈发布了最新单曲<说好不哭> 发布后,真的让一波人哭了 一群想抢鲜听的小伙伴直接泪奔 因为 QQ 音乐直接被搞崩了 没想到干翻 QQ 音乐的不是网易云音乐 ...
- js 价格 格式化 数字和金额
方法一: abs = function(val){ //金额转换 分->元 保留2位小数 并每隔3位用逗号分开 1,234.56 var str = (val/100).toFixed(2) + ...
- 浅谈javascript引擎执行代码的步骤-(2019-2)
平时面试经常会遇到类似下面的这种题,而且千变万化,让人一个头两个.示例这道题算是稍微有点难度的了,这种题考查的是JavaScript引擎执行代码的步骤. b = 'cba'; function a(a ...
- HTML+css基础 css的几种形式
1.行间样式:将style写在标签内的充当标签标签属性 2.行内样式
- Mongodb--内存管理MMAP
MongoDB使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP. MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内 ...
- mybatis批量更新出现he error occurred while setting parameters
当你更新一条时,不会发生问题,但是执行多条就出现了错误原因是mysql 配置jdbc:driver 应该添加&allowMultiQueries=trueurl:jdbc:mysql://lo ...
- Flask--闪现、中间件、多app应用
目录 闪现 源码 案例 中间件 自定义局部中间件 自定义全局装饰器 多app应用 闪现 flask提供了一个非常有用的flash()函数,它可以用来"闪现"需要提示给用户的消息,比 ...
- dtd语法
dtd语法 <!ELEMENT 元素名 约束> //简单元素三种:没有子元素的元素 eg: <!ELEMENT name (#PCDATA)> (#PCDATA):约束name ...
- Seata为什么效率高
1. Seata为什么效率高 1.1. 应对面试官的解释 Seata的解决方案是两阶段提交的升级版,传统两阶段提交资源管理器(RM)放在数据库端,由数据库管理,需要数据库支持XA协议. 而Seata把 ...
- SharpGL之透视投影和摄像机
当三维体放在世界坐标系中后,由于显示器只能用二维图像显示三维休,因此必须要依赖投影来把三维体降低维数. 投影变换的目的就是定义了一个视景体,使得视景体外多余的部分不会显示. 投影包括透视投影(pers ...