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 浅谈面向对象编程
面向对象编程:第一步找名词,名词是问题域中的. 第二步概括名词设计成类.某些名词可以浓缩包含到其它名词中,成为其属性. 第三步找动词,动词也是问题域中的. 第四步概括动词设计成方法.动作的产生往往 ...
随机推荐
- 数据库之 MySQL --- 数据处理 之 子查询 (二)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一 .数据库语言定义及命令行查看数据库操作 -- SQL 语言可以分为三类-- DML: 数据操纵语言. ...
- Java实现 LeetCode 455 分发饼干
455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 ...
- Java实现 蓝桥杯VIP 算法训练 水仙花数
这道题有两个方法,第一个就相对来说通俗易懂 第二个可以用到Java的一些方法 public class 水仙花数1 { public static void main(String[] args) { ...
- Java实现 神犇的悲惨一生
[问题描述] 传说中有位神犇,因其一贯低调,所以人们连他活了多少岁都不知道. 好在XXXX文献上有段关于他生平细节的文字:神犇一生中, 幼年占了1/6,又过了1/12的青春期,又谈了1/6的恋爱后结婚 ...
- Java实现 LeetCode 60 第k个排列
60. 第k个排列 给出集合 [1,2,3,-,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" &q ...
- Java实现 LeetCode 53 最大子序和
53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 ...
- java实现第二届蓝桥杯四方定理
四方定理. 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. 我们可以通过计算机验证其在有限范围的正确性. 对于大数,简单的循环嵌套是不适宜的.下面的代码给出了一种分解方案. 请 ...
- Java虚拟机性能调优(一)
Java虚拟机监控与调优,借助Java自带分析工具. jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat:JVM Statistics M ...
- Redis学习笔记(十七) 集群(上)
Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移操作. 一个Redis集群通常由多个节点组成,在刚开始的时候每个节点都是相互独立的,他们处于一个只包含 ...
- multimap遍历与查找
std::multimap<int, std::string> m; m.insert(std::make_pair(0, "w0")); m.insert(std:: ...