美文网首页
006-面向对象1

006-面向对象1

作者: 痞子_4ae7 | 来源:发表于2020-05-14 11:48 被阅读0次

面向过程与面向对象

  • 开车问题
  • 吃饭问题
  • 做饭问题

类与对象

  • 类的概念
将具有共同特征以及共同行为的一组对象进行抽象,抽象出来的东西,就有一个概念:类
类就相当于制造盖楼使用的设计图
  • 对象的概念
某一个具体的存在,看得见的,摸的着的
例如:望京soho(猪腰子),中央电视台总部大楼(大裤衩)
  • 练习: 区分类与对象
奥迪汽车
张三停在车库的奥迪A8
雅迪
人
咱班坐在xx的xx
笔记本
thinkPad
小明的thinkPad
  • 类的组成
类名
属性:(静态) 一组数据
方法:(动态)运行调用的函数
  • 设计练习
封装人类:
属性:年龄、性别、年龄
行为:吃、睡、学习
封装狗类:
属性:品种、名字、颜色
行为:叫、跑、睡觉
  • 抽象的练习
    • 王者荣耀团战图片面向对象分析
    • 绝地求生图片面向对象分析

类的定义

语法:
class 类名:
方法列表
案例:
class Person:
# 自我介绍方法
    def introduce(self):
        print("我的名字叫:%s,今年%d岁了"%(self.name,self.age))
注意:
也有类似使用(新式类,手动指明了父类为谁)
class Person(object):
def xxxx():
....
类的命名规则:
大驼峰  Person、 Cat、Dog...

创建对象

封装好类,等于是画好了图纸,下边就
可以开始根据图纸进行一座座楼房的建造了
  • 语法格式
对象名 = 类名()
p = Person()
  • 案例
class Person:
    # 自我介绍方法
    def introduce(self):
        print("我的名字叫:%s,今年%d岁了"%(self.name,self.age))
# p = Person('ss',12)
# 创建对象
p = Person()
# 添加属性,并给属性赋值
p.name = '陈独秀'
# 如果在这调用方法,会报错,因为在方法的调用中,访问了age属性,但是,目前对象中还没有该属性
# p.introduce()
# 添加属性,并给属性赋值
p.age = 30
# 调用对象的方法
p.introduce()
注意:
对象包含属性和方法两部分
第一次p.name 是给对象添加属性,之后再访问,则是修改属性的值

init方法

  • init引入
每次创建对象,都需要手动添加属性,创建多个对象,这些操作要进行多次,
有没有简便的方式,创 建每一个对象,都自动包含了这些属性
答案: 有,__init__方法的使用
  • init方法的使用
class Dog:
# 创建对象时,该方法会被默认调用(代码验证)
    def __init__(self):
        self.name='大黄'
        self.age = 2
    def showInfo(self):
        print('name:%s,age:%d'%(self.name,self.age))
# 创建对象之后,没有手动添加属性
dog = Dog()
# 调用对象方法没有报错,说明已经对象中已经包含了name跟age两个属性
dog.showInfo()
思考:
属性的值是固定的,能不能创建对象时,
直接完成赋值,答案,可以,见 5.3
  • 自定义参数的使用
class Dog:
#给__init__方法增加参数,第一个self为默认参数,python解释器自动传递值
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def showInfo(self):
        print('name:%s,age:%d'%(self.name,self.age))
# '大黄'与 2分别是name与age的实际参数
dog = Dog('大黄',2)
dog.showInfo()
  • 练习:
完成一个Student类的封装,包含属性:name,age,gender 方法:study(),eat()
创建对象并直接赋值(通过__init__方法完成),调用方法测试
  • magic方法

    在python中,有一些内置好的特定的方法,这些方法在进行特定的操作时会自动被调用,称之为魔法方法
    
    • 打印id
    class Dog:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def showInfo(self):
            print('name:%s,age:%d'%(self.name,self.age))
    dog = Dog('大黄',2)
    print(dog)
    打印结果:
    <__main__.Dog object at 0x0000000002839E10>
    
  • 定义str()方法

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def showInfo(self):
        print('name:%s,age:%d' % (self.name, self.age))
    def __str__(self):
        # 使用'+'只能拼接字符串
        message = "我的名字:" + self.name + ",我的年龄:" + str(self.age)
        return message
dog = Dog('大黄', 2)
# dog.showInfo()
# 这时候会打印__str__方法中return的数据
print(dog)

self 关键字的使用

  • 表示意义:
可以理解为自己,类似与Java、C++中的this指针,表示对象自身
注意:
某个对象调用方法时,python解释器会把这个对象做为第一个参数,传递给self,也就是
哪个对象调用该方法,self表示的是谁
  • 用法:

    • 添加/访问属性
    • 访问当前类中的其他方法
    见案例:
    class Dog:
        def __init__(self,name,age):
            # self作用,访问/添加属性
            self.name = name
            self.age = age
        def showInfo(self):
            print("name:%s,age:%d"%(self.name,self.age))
            # 直接访问当前类中其他方法会报错
            # shout()
            # 访问当前类中的其他对象方法
            self.shout()
        def shout(self):
            print("汪汪汪~")
    
    # 定义一个函数
    def printDog(dog):
        # 判断dog为Dog的类的对象(做容错处理,防止函数调用直接给一个字符串参数抛出异常)
        if isinstance(dog,Dog):
            print("是dog对象")
            # 函数中调用Dog类中的方法
            dog.showInfo()
    # 创建对象
    dog1 = Dog('大黄',2)
    dog2 = Dog('小黑',1)
    # 调用函数
    printDog(dog1)
    printDog(dog2)
    # 如果没有使用  isinstance(对象,所属类),这行代码会导致报错
    printDog("123")
    

隐藏数据(属性私有)

  • 修改属性的方式

    • 直接修改
    • 间接修改(通过方法修改)
    class Hero:
        def __init__(self,name,gender,age):
            # self.__name = name
            self.setName(name)
            self.__gender = gender
            # self.__age 可以将属性保护起来,类的外部无法访问
            # self.__age = age
            self.setAge(age)
        def setName(self,name):
            self.__name = name
        def setAge(self,age):
            if age > 0:
                self.__age = age
            else:
                print("年龄不合理,设置默认年龄1")
                self.__age = 1
        def __str__(self):
            return  'class:Hero'+'['+self.__name+','+self.__gender+','+str(self.__age)+']'
    h1 = Hero('陈独秀','男',-100)
    # 直接修改不合理,可以给任意值
    # 属性保护之后,无法通过直接访问的方式进行访问,有利于数据安全
    h1.age = -200
    print(h1)
    

面向对象练习之回合制小游戏

  • 面向对象练习
类的封装: 普通攻击,跟技能攻击,
技能需要封装新的类
随机模块的使用 
import random

相关文章

  • 006-面向对象1

    面向过程与面向对象 开车问题 吃饭问题 做饭问题 类与对象 类的概念 对象的概念 练习: 区分类与对象 类的组成 ...

  • java基础02面向对象

    二、面向对象 1、面向对象思想: (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的...

  • Java程序员必修内功心法!(内功修炼第二层)

    1,Java 面向对象 1.1类和对象 1.1.1. 面向对象和面向过程的区别 1,面向过程 :面向过程性能比面向...

  • Java面向对象

    OO: 面向对象OOA:面向对象分析OOD:面向对象设计OOP:面向对象编程1.什么是类?什么是对象1)现实世...

  • Java基础总结2-面向对象

    二、面向对象 1、面试对象思想: (1)概述:面向对象对相对于面向过程而言的,面向过程强调的是功能,面向对象强调的...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

  • Java基础

    1.面向过程和面向对象区别 1.1面向过程:面向过程性能高于面向对象 1.2面向对象:面向对象易复用,易拓展,易维...

  • 8.面向对象基础

    1.什么是面向对象 2.应该如何学习面向对象 3.面向对象的思维方式 什么是面向对象 1.面向对象是一种编程方法;...

  • JS面向对象

    JS面向对象入门 1、面向对象语言概念面向对象语言主要包括 类、对象、封装、多肽。2、面向对象的编程思想面向过程思...

  • 面向对象基础

    一、面向对象概述 1、面向对象编程包括: OOA:面向对象分析OOD:面向对象的设计OOP:面向对象的编程实现 2...

网友评论

      本文标题:006-面向对象1

      本文链接:https://www.haomeiwen.com/subject/heftohtx.html