• 面向对象(一) 类和对象


    .面向对象的介绍  (面向对象编程(OOP))

         (1)面向对象(Object Oriented)是软件开发方法,一种编程范式.

         (2)面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物

         (3)面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式

         (4)面向对象的特点:  封装, 继承, 多态

         案例: 解决吃啤酒鸭的问题

         方式一(面向过程):                                  方式二(面向对象):

             1) 养鸭子                                                 1) 找个卖啤酒鸭的商贩

             2)鸭子长成                                               2) 掏钱买啤酒鸭

             3)杀鸭子                                                   3) 吃啤酒鸭

             4)烹饪

             5)吃啤酒鸭

    二.类和对象

         类和对象是面向对象编程中的2个重要概念. 其中对象是面向对象编程的核心, 在使用对象的过程中,为了将具有共同特征和行为的一组对象定义,提出另外一个概念---类.

    2.1 类

    ◆  人以类聚,物以群分

    ◆  具有相似内部状态和运动规律的实体的集合(或统称为抽象)

    ◆  具有相同属性和行为事物的统称

    ◆  类是抽象的, 一个类可以找到多个对象

    2.2 对象

    ◆  某一个具体事物的存在,在现实世界中可以是看得见摸得着的

    ◆  可以是直接使用的

    2.3 练习(区分类和对象) 

    (1) 汽车     类

         奔驰汽车     类

         张三开的那辆奔驰汽车     对象

    (2) 水果     类

          苹果     类

          红富士苹果     类

          我手上拿着的苹果     对象

    2.4 类的构成

    类Class是由3部分组成的:

        ①类的名称: 类名    比如: 人Person

        ②类的属性:一组数据    比如: 姓名name, 年龄age,身高height等

        ③类的方法:允许进行的操作的方法    比如: 跑run, 跳skip等

    三.定义类

    3.1 定义格式:

    class 类名:

            方法列表

    3.2 定义形式

    1. demo: 定义一个Hero类
    2. #旧式经典类定义
    3. class Hero:
    4. def info(self):
    5. print('英雄所见略同')
    6. #新式类定义
    7. class Hero(object):
    8. def info(self):
    9. print('英雄所见略同')

    注意: 

    (1) object是Python里所有类的最顶级父类

    (2) 类名按照大驼峰命名法命名

    (3) info是一个实例方法,第一个参数一般是self表示实例对象本身;也可以将self换为其他的名字, 其作用是一个变量,这个变量指向了实例对象

    四.创建对象

    4.1 创建对象的格式为:(实例化对象)

           对象名1=类名()

           对象名2=类名()

    4.2 创建对象Demo

     五.添加和获取对象的属性

    1. class Hero(object):
    2. '''定义一个英雄类,可以移动和攻击'''
    3. def move(self):
    4. '''实例方法'''
    5. print('正在前往事发地点....')
    6. def attack(self):
    7. '''实例方法'''
    8. print('发出了一招强有力的普通攻击')
    9. # 实例化一个对象
    10. t=Hero()
    11. # 给对象添加属性及相应的属性值
    12. t.name='泰达米尔'
    13. t.hp=2600 #生命值
    14. t.atk=450 #攻击力
    15. t.armor=200 #护甲值
    16. # 格式化输出
    17. print('英雄: %s的生命值: %d' %(t.name,t.hp))
    18. print('英雄: %s的攻击力: %d' %(t.name,t.atk))
    19. print('英雄: %s的护甲值: %d' %(t.name,t.armor))
    20. # 调用方法
    21. t.move()
    22. t.attack()

     六.实例方法通过self获取对象属性

    1. class Hero(object):
    2. '''定义一个英雄类,可以移动和攻击'''
    3. def move(self):
    4. '''实例方法'''
    5. print('正在前往事发地点....')
    6. def attack(self):
    7. '''实例方法'''
    8. print('发出了一招强有力的普通攻击')
    9. def info(self):
    10. print('英雄: %s的生命值: %d' % (self.name, self.hp))
    11. print('英雄: %s的攻击力: %d' % (self.name, self.atk))
    12. print('英雄: %s的护甲值: %d' % (self.name, self.armor))
    13. # 实例化一个对象
    14. t=Hero()
    15. # 给对象添加属性及相应的属性值
    16. t.name='泰达米尔'
    17. t.hp=2600 #生命值
    18. t.atk=450 #攻击力
    19. t.armor=200 #护甲值
    20. # 调用方法
    21. t.info()
    22. t.move()
    23. t.attack()

    七.魔法方法

    7.1 __init__()方法

    1. class Hero(object):
    2. '''定义一个英雄类,可以移动和攻击'''
    3. def __init__(self): #self代表实例化对象
    4. #赋值 没有参数
    5. self.name='泰达米尔'
    6. self.hp=2600 #生命值
    7. self.atk=450 #攻击力
    8. self.armor=200 #护甲值
    9. def move(self):
    10. '''实例方法'''
    11. print('正在前往事发地点....')
    12. def attack(self):
    13. '''实例方法'''
    14. print('发出了一招强有力的普通攻击')
    15. def info(self):
    16. print('英雄: %s的生命值: %d' % (self.name, self.hp))
    17. print('英雄: %s的攻击力: %d' % (self.name, self.atk))
    18. print('英雄: %s的护甲值: %d' % (self.name, self.armor))
    19. # 实例化一个对象
    20. t=Hero()
    21. # 调用方法
    22. t.info()
    23. t.move()
    24. t.attack()
    1. class Hero(object):
    2. '''定义一个英雄类,可以移动和攻击'''
    3. def __init__(self,name,hp,attack,armor):
    4. #属性初始化 有参数
    5. self.name=name
    6. self.hp=hp #生命值
    7. self.atk=attack #攻击力
    8. self.armor=armor #护甲值
    9. def move(self):
    10. '''实例方法'''
    11. print('正在前往事发地点....')
    12. def attack(self):
    13. '''实例方法'''
    14. print('发出了一招强有力的普通攻击')
    15. def info(self):
    16. print('英雄: %s的生命值: %d' % (self.name, self.hp))
    17. print('英雄: %s的攻击力: %d' % (self.name, self.atk))
    18. print('英雄: %s的护甲值: %d' % (self.name, self.armor))
    19. # 实例化一个对象
    20. t=Hero('泰达米尔',2600,450,200)
    21. # 调用方法
    22. t.info()
    23. t.move()
    24. t.attack()
    1. 注意:
    2. (1)在类的内部获取属性和实例方法,通过self获取
    3. (2)在类的外部获取属性和实例方法,通过对象名获取
    4. (3)如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址
    5. (4)但是实例方法是所有对象共享的,只占有一份内存空间.类会通过self来判断是哪个对象调用了实例方法

    7.2 __str__()方法

         str 如果一个类中定义了__str__方法,在打印对象时,默认输出该方法的返回值,没有定义会返回对象的地址

    1. class Hero(object):
    2. '''定义一个英雄类,可以移动和攻击'''
    3. def __init__(self,name,hp,attack,armor):
    4. self.name=name
    5. self.hp=hp #生命值
    6. self.atk=attack #攻击力
    7. self.armor=armor #护甲值
    8. def move(self):
    9. '''实例方法'''
    10. print('正在前往事发地点....')
    11. def attack(self):
    12. '''实例方法'''
    13. print('发出了一招强有力的普通攻击')
    14. def __str__(self):
    15. return '英雄<%s>数据: 生命值 %d, 攻击力 %d, 护甲值 %d' % (self.name, self.hp,self.atk,self.armor)
    16. # 实例化一个对象
    17. t=Hero('泰达米尔',2600,450,200)
    18. g=Hero('盖伦',4200,260,400)
    19. print(t)
    20. print(g)
    21. 返回值:
    22. 英雄<泰达米尔>数据: 生命值 2600, 攻击力 450, 护甲值 200
    23. 英雄<盖伦>数据: 生命值 4200, 攻击力 260, 护甲值 400

    7.3 __del__()方法

          析构方法,删除无用的内存对象(当程序结束会自动自行析构方法) 

    1. class Dog(object):
    2. def __init__(self,name):
    3. self.name =name
    4. print("__init__方法被调用")
    5. def __del__(self):
    6. print("__del__方法被调用")
    7. print("python解释器开始回收%s对象了" % self.name)
    8. p = Dog('Bob')
    9. del p
    10. 返回结果:
    11. __init__方法被调用
    12. __del__方法被调用
    13. python解释器开始回收Bob对象了

    八.课堂作业

    1. class Dog:
    2. '''定义一个Dog类'''
    3. #初始化方法
    4. #创建完对象后会自动被调用
    5. def __init__(self,name,age,skill):
    6. self.name=name
    7. self.age=age
    8. self.skill=skill
    9. def __str__(self):
    10. return '%s,年龄%d岁,技能是:"%s"' %(self.name,self.age,self.skill)
    11. if __name__=='__main__':
    12. #创建对象
    13. a = Dog('大黄狗', 5, '汪汪叫')
    14. print(a)
    15. b = Dog('大黑狗', 3, '呲牙咧嘴')
    16. print(b)
    17. c = Dog('大白狗', 1, '夹着尾巴跑')
    18. print(c)
    1. 大黄狗,年龄5岁,技能是:"汪汪叫"
    2. 大黑狗,年龄3岁,技能是:"呲牙咧嘴"
    3. 大白狗,年龄1岁,技能是:"夹着尾巴跑"

  • 相关阅读:
    Golang map
    使用gets函数求文件的行数
    联想刘军:做深做透全栈AI产品方案和服务,建立差异化竞争优势
    Nmap渗透测试指南之数据库渗透测试
    有哪些挣钱软件一天能赚几十元?盘点十个能长期做下去的挣钱软件
    评测管理的业务逻辑
    现在报PMP还来得及参加9月的考试吗?分享敏捷全真模拟题
    BeanDefinition
    【校招VIP】“推推”产品项目课程:产品的脑图分析
    UnityShader入门精要——PBS基于物理的渲染
  • 原文地址:https://blog.csdn.net/qq_44954371/article/details/126469356