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 浅谈面向对象编程
面向对象编程:第一步找名词,名词是问题域中的. 第二步概括名词设计成类.某些名词可以浓缩包含到其它名词中,成为其属性. 第三步找动词,动词也是问题域中的. 第四步概括动词设计成方法.动作的产生往往 ...
随机推荐
- Java实现 LeetCode 530 二叉搜索树的最小绝对差(遍历树)
530. 二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值. 示例: 输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为 1,其中 2 ...
- Java实现 蓝桥杯VIP 算法提高 计算器
算法提高 计算器 时间限制:1.0s 内存限制:256.0MB [问题描述] 王小二的计算器上面的LED显示屏坏掉了,于是他找到了在计算器维修与应用系学习的你来为他修计算器. 屏幕上可以显示0~9的数 ...
- Java实现 LeetCode 76 最小覆盖子串
76. 最小覆盖子串 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = ...
- Java实现 LeetCode 42 接雨水
42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...
- Java实现 LeetCode 23 合并K个排序链表
23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输 ...
- PAT 福尔摩斯的约会
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...
- .Net Core WebAPI + Axios +Vue 实现下载与下载进度条
故事的开始 老板说:系统很慢,下载半个小时无法下载,是否考虑先压缩再给用户下载? 本来是已经压缩过了,不过第一反应应该是用户下的数量多,导致压缩包很大,然后自己测试发现,只是等待的时间比较久而已,仍然 ...
- 大话计算机网络一 聊聊UDP
引言 UDP是一个简单的面向数据报的运输层协议 UDP不提供可靠性,它把应用程序传给IP层得数据发送出去,不保证它们能达到目的地 UDP首部 端口号表示发送进程和接受进程. UDP长度字段指的是UDP ...
- opencv 移植
1.ubunut系统搭建opencv+python开发环境 1.1.ubuntu系统安装pip3工具 sudo apt-get install python3-pip //安装python模块安装工具 ...
- tp5的 LayUI分页样式实现
1.先配置你的分页参数: //分页配置 'paginate' => [ 'type' => 'Layui', 'var_page' => 'page', 'li ...