Python之浅谈面向对象
面向对象和面向过程
面向过程
概念:将需要做的事流程化,并得到结果
优点:复杂问题流程化,进而简单化
缺点:可扩展性差
面向对象
概念:通过定义一个个对象,让对象去做需要做的事,最终得到结果
优点:可扩展性高
缺点:编写复杂
类与对象
定义类
在现实世界中:先有对象,再有类
世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念
也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在
在程序中,务必保证:先定义(类),后使用(产生对象)
这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类
不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象
class关键字 类名:
pass
产生对象
对象=类名()
类
- 获取类的属性和方法
类.__dict__ - 类来调用属性和方法
- 通过dict来取(复杂,不用)
- 类名.属性/函数
对象
1.对象获取属性和方法
对象.__dict__
2.对象来调用属性和方法
对象.属性/方法
产生对象
属性查找顺序
-先从对象自身找------>类中找----->报错
对象赋属性
1.方式一:
stu1=Student()
stu1.name='tim'
2.方式二(通过__init__):
在类中定义该方法,方法上写一些参数
在对象实例化产生对象时,在括号中传的值,会被传到__init__中
绑定方法
定义在类内部
对象来调用,会自动把对象传过来,在方法内部就可以修改该对象
一切皆对象
L1=[1,2,3]
class Student:
pass
print(type(L1))
print(type(Student()))
<class 'list'>
<class 'main.Student'>
都是对象
人狗大战小游戏
import random
import time
class Dog:
lind = '藏獒'
def __init__(self, name, atk, hp=100):
self.name = name
self.atk = atk
self.hp = hp
def attack(self, target):
target.hp -= self.atk
print(f'{self.name}攻击了{target.name}扣了{self.atk}血,还剩{target.hp}')
class Human:
def __init__(self, name, atk, hp=100):
self.name = name
self.atk = atk
self.hp = hp
def attack(self, target):
target.hp -= self.atk
print(f'{self.name}攻击了{target.name}扣了{self.atk}血,还剩{target.hp}')
class Equip:
equip_name = ['剑', '刀', '锏']
equip_atk = [5, 15, 60]
def get():
dog_name = input('请输入狗名:').strip()
dog_atk = int(input('请输入狗的攻击力:').strip())
dog_hp = int(input('请输入狗的血量:').strip())
human_name = input('请输入人名:').strip()
human_atk = int(input('请输入人的攻击力:').strip())
human_hp = int(input('请输入人的血量:').strip())
dog1 = Dog(dog_name, dog_atk, dog_hp)
man = Human(human_name, human_atk, human_hp)
re_choice = input('按任意键随机抽取武器').strip()
ran = random.randint(0, 2)
print(f'您抽中了{Equip.equip_name[ran]}')
man.atk += Equip.equip_atk[ran]
return dog1, man
dog1, man = get()
res_choice = input('按任意键开始战斗 ').strip()
while 1:
choice = random.randint(1, 2)
if choice == 1:
man.attack(dog1)
time.sleep(0.5)
elif choice == 2:
dog1.attack(man)
time.sleep(0.5)
if dog1.hp < 0:
print(f'人{man.name}赢了')
break
if man.hp < 0:
print(f'狗{dog1.name}赢了')
break
Python之浅谈面向对象的更多相关文章
- python进阶_浅谈面向对象进阶
python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class F ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- 在Objective-C中浅谈面向对象
接触面向对象也有一段时间了,当时是通过C++学习的OOP,后来又接触到了PHP和Java.每种OOP的语言在面向对象上或多或少都会有不同的地方,现在在学习OC的面向对象部分,又感觉到OC面向对象的特点 ...
- .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)
阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...
- 【python】浅谈包
python中的包可以理解为模块的集合.每个包也既可以为单包也可以有多个小包组成. Python中的package定义很简单,其层次结构与目录的层次结构相同,但是每个package必须包含一个__in ...
- 【python】浅谈encode和decode
对于encode和decode,笔者也是根据自己的理解,有不对的地方还请多多指点. 编码的理解: 1.编码:utf-8,utf-16,gbk,gb2312,gb18030等,编码为了便于理解,可以把它 ...
- Java系列1 -- 浅谈面向对象
也许每一个计算机专业的人,在大学学习java的时候,老师开始时都会说这么一句话,"Java是一门面向对象的语言".那么面向对象到底是什么,他有什么好处,或者他比其他流行的语言C/C ...
- Python实例浅谈之三Python与C/C++相互调用
一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不经过 ...
- day10 浅谈面向对象编程
面向对象编程:第一步找名词,名词是问题域中的. 第二步概括名词设计成类.某些名词可以浓缩包含到其它名词中,成为其属性. 第三步找动词,动词也是问题域中的. 第四步概括动词设计成方法.动作的产生往往 ...
随机推荐
- ASP.NET中使用Entity Framework开发登陆注册Demo
这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 当前步骤是该项目的第一部分 第一部分(当前) 第二部分 大完结版本 直接上步骤,有类似的开发登陆注册也可以参考. 登陆注册的 ...
- Java实现 LeetCode 761 特殊的二进制序列(括号问题)
761. 特殊的二进制序列 特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等. 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量. 给定一个特殊的二进制序列 ...
- Java实现 蓝桥杯 算法训练 字串统计
算法训练 字串统计 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最 ...
- Java实现 LeetCode 352 将数据流变为多个不相交区间
352. 将数据流变为多个不相交区间 给定一个非负整数的数据流输入 a1,a2,-,an,-,将到目前为止看到的数字总结为不相交的区间列表. 例如,假设数据流中的整数为 1,3,7,2,6,-,每次的 ...
- Java实现第九届蓝桥杯书号验证
书号验证 2004年起,国际ISBN中心出版了<13位国际标准书号指南>. 原有10位书号前加978作为商品分类标识:校验规则也改变. 校验位的加权算法与10位ISBN的算法不同,具体算法 ...
- css背景图片加载失败,页面部分图标无法显示
1.问题表现:首屏缺失部分图标.点击按钮切换为激活状态时,部分按钮的激活态图标无法显示. 2.问题原因:网络极差,断断续续,点击时添加class:active变为激活态, active.png这张图片 ...
- 经典文本特征表示方法: TF-IDF
引言 在信息检索, 文本挖掘和自然语言处理领域, IF-IDF 这个名字, 从它在 20 世纪 70 年代初被发明, 已名震江湖近半个世纪而不曾衰歇. 它表示的简单性, 应用的有效性, 使得它成为不同 ...
- 曹工说JDK源码(2)--ConcurrentHashMap的多线程扩容,说白了,就是分段取任务
前言 先预先说明,我这边jdk的代码版本为1.8.0_11,同时,因为我直接在本地jdk源码上进行了部分修改.调试,所以,导致大家看到的我这边贴的代码,和大家的不太一样. 不过,我对源码进行修改.重构 ...
- 01-Python初体验
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- js排他性算法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...