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: # ...
随机推荐
- Reat学习笔记4
相信很多初学react的朋友在研究组件的路由配置问题时都很困扰,我也是折腾了半天才搞明白的. 一般情况下路由配置包含path和component两个信息: component顾名思义是组件的意思,指的 ...
- springcloud源码分析(一)之采用redis实现注册中心
注册中心 在分布式架构中注册中心起到了管理各种服务功能包括服务的注册.发现.熔断.负载.降级等功能,在分布式架构中起到了不可替代的作用.常见的注册中心有eureka,zookeeper等等,在spri ...
- systemdump相关
/vendor/sprd/open-source/tools/crashcat sysdump.core.* > dump.bincrash -m phys_base=0x80000000 du ...
- pixijs shader 扫光加强版
pixijs shader 扫光加强版 const app = new PIXI.Application({ transparent: true }); document.body.appendChi ...
- 如何忽略Findbugs的bug
如何忽略Findbugs的bug 除了用xml的形式去忽略一些文件和bug.最好用的还是注解: 下面的方法会有MT_CORRECTNESS和STYLE的bug.注解忽略方法为: @edu.umd.cs ...
- .NET Core 多框架支持(net45+netstandard20)实践中遇到的一些问题总结
.NET Core 多框架支持(net45+netstandard20)实践中遇到的一些问题总结 前言 本文主要是关于.NET Standard 代码 在多框架 和 多平台 支持自己实践过程中遇到的一 ...
- vue中使用的一些问题(IE不兼容,打包样式不生效)
通过脚手架快速创建的项目,使用了swiper组件,项目中使用了es6语法,使用了babel-polyfill转化依旧不行,仔细排查项目中的使用组件,最后找到问题所在 swiper4.5.0版本太高,不 ...
- IIS 503错误解决办法 HTTP Error 503
今天在win7上部署一个IIS网站,莫名出现HTTP Error 503,于是对比了一下之前的网站配置,依然无果. 无奈之下,挨个查看IIS配置.查看“事件查看器”,尝试修改应用程序池 - 高级设置 ...
- 在.NET Core 3.0 Preview上使用Windows窗体设计器
支持使用基于Windows窗体应用程序的.NET Core 3.0(预览)的Windows窗体设计器 介绍 截至撰写本文时,Microsoft和社区目前正在测试.NET Core 3.0.如果您在.N ...
- C# - VS2019 WinFrm程序调用ZXing.NET实现条码、二维码和带有Logo的二维码的识别
前言 C# WinFrm程序调用ZXing.NET实现条码.二维码和带有Logo的二维码的识别. ZXing.NET导入 GitHub开源库 ZXing.NET开源库githib下载地址:https: ...