返回顶部
首页 > 资讯 > 后端开发 > Python >day 22 - 1 面向对象
  • 821
分享到

day 22 - 1 面向对象

面向对象day 2023-01-30 23:01:06 821人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

面向对象 字典实现人狗大战 #定义角色 def Person(name,hp,aggr,sex): person = { 'name':name, 'hp':hp, 'aggr':

面向对象

字典实现人狗大战

#定义角色
def Person(name,hp,aggr,sex):
    person = {
        'name':name,
        'hp':hp,
        'aggr':aggr,
        'sex':sex
        }
    return person


def Dog(name,hp,aggr,kind):
    dog = {
        'name':name,
        'hp':hp,
        'aggr':aggr,
        'kind':kind
        }
    return dog
#定义技能
#打
def attack(person,dog):
    dog['hp'] -= person['aggr']
    print('%s损失了%s的血量'%(dog['name'],person['aggr']))

#咬
def bite(dog,person):
    person['hp'] -= dog['aggr']
    print('%s损失了%s的血量'%(person['name'],dog['aggr']))
#print(Person('new',100,2,'不祥'))
#print(Dog('二哈',100,3,'taddy'))

man = Person('雷诺',100,2,'不祥')   #实例化
dogs = Dog('二哈',100,3,'taddy')

bite(dogs,man)
print(man)

这样会出现一个问题,就是把角色搞混

我们把技能封装到任务所属的函数中,这个就不容易把任务关系搞混了

def Person(name,hp,aggr,sex):
    person = {
        'name':name,
        'hp':hp,
        'aggr':aggr,
        'sex':sex
        }
    def attack(dog):
        dog['hp'] -= person['aggr']
        print('%s损失了%s的血量'%(dog['name'],person['aggr']))
    person['attack'] = attack
    return person

def Dog(name,hp,aggr,kind):
    dog = {
        'name':name,
        'hp':hp,
        'aggr':aggr,
        'kind':kind
        }
    def bite(person):
        person['hp'] -= dog['aggr']
        print('%s损失了%s的血量'%(person['name'],dog['aggr']))
    dog['bite'] = bite
    return dog


man = Person('new',100,2,'不祥')
dogs = Dog('二哈',100,3,'taddy')

man['attack'](dogs)  #然后我们就可以这样来调用 Person 函数中的 attack 函数
dogs['bite'](man)

简单小结:

Dog 函数和 Person 函数 都是定义了一类事物
直到调用了函数,赋值了之后才真的有了一个实实在在的人或狗
代码精简了 方便增加人物 方便修改 人物更加规范 —— 人模子

 

面向对象编程
所谓模子 就是 类 抽象的 我能知道有什么属性 有什么技能 但不能知道属性具体的值
人 屋子  就是对象   有具体的值,属性和技能都是根据类规范的

面向过程 VS 面向对象

面向过程的程序设计的核心是过程(流水线式思维)
  优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可
  缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。
  应用场景:一旦完成基本很少改变的场景,著名的例子有 linux 內核,git,以及Apache Http Server等

面向对象的程序设计的
  优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
  缺点:可控性差,无法像面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。
  应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

 

自定义类

#定义
class 类名:
    属性 = 'a'

#查看
print(类名.属性)

# 类名的作用 就是操作属性 查看属性

我们来看一个例子

class Person:                   # 类名
    def __init__(solf,*args):   # 初始化方法,self是对象,是一个必须传的参数 
        solf.name = args[0]     # self 就是一个可以存储很多属性的大字典
        solf.hp = args[1]       # 而往字典里添加属性的方式发生了一些变化
        solf.aggr = args[2]
        solf.sex = args[3]
per = Person('小强',100,3,'不祥')
print(per)  #返回的是一个内存地址

print(per.name)  #查看属性值
print(per.hp)    #查看属性值
print(per.aggr)  #查看属性值

 

调用类中的方法

#调用类中的方法
class Person:
    count = 'China'          # 创造了一个只要是这个类就一定有的属性,这个是类拥有的 而不是属性
                             # 类属性 静态属性
    def __init__(self,*args):# 初始化方法
        self.name = args[0]
        self.hp = args[1]
        self.aggr = args[2]
        self.sex = args[3]
    def run(self,n):          #定义了一个方法,一般情况下必须传 self 参数,且必须写在第一个
                              #后面还可以传其他参数,是自由的
        print('%s跑跑跑,跑了%s公里'%(self.name,n))  ##2.接收参数
per = Person('小强',100,3,'不祥')

print(Person.__dict__)  #可以看到 Person 方法中有 run 这个函数(#查看所有属性)
print(Person.run)       #为一个内存地址
Person.run(per,6)       #此处为什么是 per,因为在赋值使用 Person 函数后 self 的值返回给了 per

#per.run()        #另一种简便方法  对象名 + 方法名  与 Person.run(per) 等价
per.run(5)        ##1.传值
print(per.count)  #获取静态属性

类的内容查看、修改、添加

#接上
#对类的内容查看、修改、添加
print(Person.__dict__)  #得到的是类中存储的所有名字
print(Person.__dict__['count']) #可以通过 __dict__ 使用字典的方式操作

print(per.__dict__)     #得到的 per 所有属性
print(per.__dict__['name']) 
per.__dict__['name'] = '小吼' #可以查看也可以修改
print(per.__dict__['name'])

print(per.name)
per.name = '鸟人'     #不过一般通过属性来修改
print(per.name)
per.age = 49          #增加
print(per.__dict__)

 

简单小结:

对象 = 类名()
过程:
  类名() 首先 会创造出一个对象,创建了一个self变量
  调用 init 方法,类名括号里的参数会被这里接收
  执行 init 方法
  返回 self

对象能做的事:
  查看属性
  调用方法
  __dict__ 对于对象的增删改查操作都可以通过字典的语法进行

类名能做的事:
  实例化
  调用方法 : 只不过要自己传递 self 参数
  调用类中的属性,也就是调用静态属性
  __dict__ 对于类中的名字只能看 不能操作 比如:修改 count,报错

 

接着我要切入主题了

使用类来完成我们最初的游戏:人狗大战

#大致如下
class Person:
    def __init__(self,name,hp,aggr,sex):
        self.name = name
        self.hp = hp
        self.aggr = aggr
        self.sex =sex
    def attack(self,dog):
        dog.hp -= self.aggr
        print('%s 损失了 %s 点 hp'%(dog.name,self.aggr))
class Dog:
    def __init__(self,name,hp,aggr,kind):
        self.name = name
        self.hp = hp
        self.aggr = aggr
        self.kind = kind
    def bite(self,person):
        person.hp -= self.aggr
        self.hp -= person.aggr
        print('%s 损失了 %s 点 hp'%(person.name,self.aggr))
        if person.hp < 0:
            print('%s 失血过多战败,%s 剩余 %s 点 HP'%(person.name,self.name,self.hp))
        else:
            print('%s 此回合战胜%s,剩余 %s 点 hp,%s 剩余%s 点 HP'%(person.name,self.name,person.hp,self.name,self.hp))

per = Person('雷诺',100,23,'男')
dog = Dog('异虫',200,12,'未知',)

while 1:
    dog.bite(per)
    if per.hp < 0 or dog.hp < 0:
        break

流程
  定义类
  init 方法
  self 是什么 self拥有属性都属于对象
  类中可以定义静态属性
  类中可以定义方法,方法都有一个必须传的参数 self
  实例化
  实例、对象
  对象查看属性
  对象调用方法

 

小结:

定义类
  class
  函数 : 方法 动态属性 # 类中可以定义方法,方法都有一个必须传的参数 self
  变量 : 类属性 静态属性 # 类中可以定义静态属性
__init__ 方法 初始化方法
python 帮我们创建了一个对象 self
  每当我们调用类的时候就会自动触发这个方法。默认传 self
  在 init 方法里面可以对 self 进行赋值
self 是什么 self 拥有属性都属于对象
  在类的内部,self 就是一个对象
  alex = Person()
  alex.walk == Person.walk(alex)
实例化
  对象 = 类(参数是 init 方法的)
实例、对象 完全没有区别
对象查看属性
  对象.属性名
对象调用方法
  对象.方法名(参数) #类名.方法名(对象名,参数)

 

--结束END--

本文标题: day 22 - 1 面向对象

本文链接: https://lsjlt.com/news/180698.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • day 22 - 1 面向对象
    面向对象 字典实现人狗大战 #定义角色 def Person(name,hp,aggr,sex): person = { 'name':name, 'hp':hp, 'aggr':...
    99+
    2023-01-30
    面向对象 day
  • Python面向对象编程Day 28部分
     with obj as f:   '代码块' 1.with obj --->触发obj.__enter__(),拿到返回值 2.as f ---> f=返回值 3.with obj as f 等同于 f=obj.__ent...
    99+
    2023-01-30
    面向对象 Python Day
  • Python面向对象编程Day 25部分
    实例化的时候python会自动把实例本身传给self __dict__ 查看属性 类调用的时候不会自动传递参数   s1.tell_info()   School.tell_info(s1) 增 .key=什么;减 del;改 =;查 ....
    99+
    2023-01-30
    面向对象 Python Day
  • Python面向对象编程Day 24部分
    三大编程范式(方法论):面向过程编程、函数式编程、面向对象编程。 类与对象   类:把一类事物的相同的特征和动作整合到一起就是类,是抽象的概念。   对象:基于类而创建的一个具体的事物,也是特征和动作整合到一起。 面向对象设计OOD:将一...
    99+
    2023-01-30
    面向对象 Python Day
  • Python面向对象编程Day 26部分
    五大数据类型:整型、字符串、列表、元组、字典 多态概念指出了对象如何通过他们共同的属性和动作来操作和访问,而不需考虑他们具体的类、多态表明了动态(又名:运行时)绑定的存在,允许重载及运行时类型确定和验证。多态是继承的改变和扩展的实现机制...
    99+
    2023-01-30
    面向对象 Python Day
  • Python面向对象编程Day 27部分
    isinstance(obj,cls)检查obj是否是类cls的实例,反映族谱关系(不仅父类可以,父类的父类也可以)  issubclass(subcls,cls)检查subcls是否是cls的子类   __getattribute__...
    99+
    2023-01-30
    面向对象 Python Day
  • PythonOOP面向对象编程1
    什么是对象? 对象是指现实中的物体或实体(拥有一系列变量、函数(方法)的) 什么事面向对象? 把一切看成对象(实例),让对象和对象之间建立关联关系 对象都有什么特征? 属性(名词)实例变量 姓名、年龄、性别 行为(动作)实...
    99+
    2023-01-30
    面向对象 PythonOOP
  • day 16 初试面试对象
    1.初识面向对象      面向过程:             一切以事物的发展流程为中心      面向对象:             一切以对象为中心.一切皆为对象.具体的某一个事务就是对象 打比方:       大象进冰箱     ...
    99+
    2023-01-30
    初试 对象 day
  • PHP面向对象02:面向对象高级
    PHP面向对象02:面向对象高级 一、设计模式1. 单例模式2. 工厂模式 二、面向对象三大特性1. 封装2. 继承3. 多态 三、继承1. 实现继承2. 有限继承a. 属性都能继承b...
    99+
    2023-09-01
    php 单例模式 开发语言
  • 面向对象
    面向对象 特性 class  object 封装、继承、多态 语法:属性、方法 构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数) 析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关...
    99+
    2023-01-30
    面向对象
  • python 面向对象、类、对象
    class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法 inheritance 继承 python中通过类和对象来实现 ...
    99+
    2023-01-31
    面向对象 对象 python
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • python 面向对象
    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序...
    99+
    2023-01-30
    面向对象 python
  • python面向对象
    python面向对象 目录: 1.类的定义和使用 2.类的封装 3.类的继承 4.多态   1.类的定义和使用 查、增加、修改、删除、初始化方法、实例化 __init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这...
    99+
    2023-01-30
    面向对象 python
  • Python|面向对象
    #一、类、对象定义及使用 #定义类语法:class 类名(父类):代码块注意:()可有可无 #class Student: #class Student(): #创建对象(实例)语法:对象名=类名() 注意:Java语言在实例化对...
    99+
    2023-01-30
    面向对象 Python
  • python - 面向对象
    #python面向对象 - 类定义   注意:特殊方法"__init__"前后分别有两个下划线!!!   __init__方法可以理解成定义属性的方法,编辑器中会默认将属性都绑定到self中,在使用时直接self.shuxing 即可哟;...
    99+
    2023-01-31
    面向对象 python
  • Python3 面向对象
    Python3 面向对象 python是一门面向对象语言,在python中有一句话:一切都是对象 面向对象简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 ...
    99+
    2023-01-31
    面向对象
  • python3_07.面向对象
        面向对象程序设计的基本步骤:    1、根据功能、抽象业务对象。    2、构建独立的业务模块,利用封装、继承、多态等抽象业务需求。    3、编写程序。    4、以对象为单位输入参数、开展测试。global关键字用来在函数或其他...
    99+
    2023-01-31
    面向对象
  • Python25 面向对象
    该文章部分转载,部分原创 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么...
    99+
    2023-01-31
    面向对象
  • 什么是面向对象,面向对象有哪些特征
    面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、CAD技术、人工智能等领域。面向对象特征主要有封装、抽象、继承、多态。 一、什么是面向...
    99+
    2023-10-29
    面向对象 特征 有哪些
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作