IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Pyhton精讲day12--Python面向对象基础编程 -> 正文阅读

[Python知识库]Pyhton精讲day12--Python面向对象基础编程

类和对象

万物皆对象
在这里插入图片描述
分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地将对象进行进行分类

对象归类

类是抽象的概念,仅仅是模板 比如说:“人”
对象是一个你能够看得到、摸得着的具体实体: 赵本山,刘德华,赵丽颖

  • 对象的特征——属性
    属性——对象具有的各种特征。 每个对象的每个属性都拥有特定值。 例如:顾客张浩和李明的年龄、姓名不一样。
  • 对象的特征——方法(操作,行为)
    对象:用来描述客观事物的一个实体,由一组属性和方法构成
    在这里插入图片描述
类型:狗
对象名:doudou
属性:
颜色:白色
方法:
叫,跑,吃

从对象抽象出“类”

在这里插入图片描述
是对象的模板, 对象是类的具体实例

# 面向过程考虑问题: 把大象塞进冰箱里
# 面向对象(oop)考虑问题: 把我们研究的事物都看成对象, 一切都是对象
name1 = "eric"
name2 = "Bob"
# 我们发现将具有相同特性的对象归为'一类'进行描述, 这样就有了'类'的概念
# 怎么描述类呢, 怎么通过类生成对象呢
# 类是对象的模板, 对象是类的具体实例
# 类的定义
# class 类名(父类):
#     pass

class Student(object):
    # 定义属性: 这个类有什么静态特性
    def __init__(self):
        self.id = None
        self.name = None
        self.score = None
    # oop里我们叫方法, 就是以前的函数, 只是多了个self
    def printInfo(self):
        print(f'学号: {self.id}  姓名: {self.name} 分数: {self.score}')
# 使用类: 类创建对象的过程叫做类的实例化
# 对象名 =  类名()
s1 = Student()
# 调用对象的方法  对象名.方法名(参数)
s1.printInfo()
# 为对象属性赋值
s1.name = 'mmx'
s1.score = 100
s1.id = 123456
s1.printInfo()
s2 = Student()
s2.name = 'eric'
s2.score = 60
s2.id = 123457
s2.printInfo()
# 写一个你喜欢的类型: 汽车 或 手机 , 进行类似上面的描述

在这里插入图片描述

  • __init__函数: 魔法函数中的一种
    当类创建对象的时候, 会自动调用这个方法, init()主要作用就是初始化对象的属性值
class Student(object):
    # 定义属性: 这个类有什么静态特性
    def __init__(self, id, name=None, score=0):
        print("__init__(self) 被调用")
        self.id = id
        self.name = name
        self.score = score
    # oop里我们叫方法, 就是以前的函数, 只是多了个self
    def printInfo(self):
        print(f'学号: {self.id}  姓名: {self.name} 分数: {self.score}')
# s1 = Student() # 无参构造函数
s2 = Student(666, 'Bob', 24)
s2.printInfo()
s3 = Student(8888)
s3.printInfo()
  • self 是什么
    self就是当前类产生的对象, 那个对象正在调用, self就是谁
class Student(object):
    # 定义属性: 这个类有什么静态特性
    def __init__(self, id, name=None, score=0):
        print("__init__(self) 被调用")
        self.id = id
        self.name = name
        self.score = score
    # oop里我们叫方法, 就是以前的函数, 只是多了个self
    def printInfo(self):
        print(f'self的地址是{id(self)}')
        print(f'学号: {self.id}  姓名: {self.name} 分数: {self.score}')
    def setScore(self, new_score):
        self.score = new_score
# s1 = Student() # 无参构造函数
s2 = Student(666, 'Bob', 24)
print(id(s2)) # 140651114559520
s2.printInfo()
s3 = Student(8888)
print(id(s3)) # 140663523451856
s3.printInfo(88)
s3.setScore()
s3.printInfo()
  • str 方法
    在这里插入图片描述

在这里插入图片描述

class Student(object):
    def __init__(self, id, name=None, score=0):
        self.id = id
        self.name = name
        self.score = score
    def printInfo(self):
        print(f'学号: {self.id}  姓名: {self.name} 分数: {self.score}')
    def __str__(self):
        return f'学号: {self.id}  姓名: {self.name} 分数: {self.score}'
s1 = Student(666, 'Bob', 24)
print(s1)
print(id(s1))
s2 = Student(8888)
print(s2)

私有属性—封装

在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到

定义方式: 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线__ 实际开发中私有属性也不是一层不变的。所以要给私有属性提供外部能够操作的方法。

class Student(object):
    def __init__(self, id, name=None, score=0):
        self.id = id
        self.name = name
        self.__score = score
    def __str__(self):
        return f'学号: {self.id}  姓名: {self.name} 分数: {self.__score}'
s1 = Student(666, 'Bob', 24)
print(s1)
print(id(s1))
s2 = Student(8888)
print(s2)
print(s1.id)
print(s1.name)
print(s1.__score)

在这里插入图片描述

编程实例: 鲁班打大龙

hero.py

from random import randint
class Hero(object):
    def __init__(self, name, blood, strength):
        self.name = name
        self.blood = blood
        self.strength = strength

    def take_damage(self, monster):
        damage = randint(monster.strength - 5, monster.strength + 5)
        self.blood -= damage
        print(f'{self.name} 你被 {monster.name}攻击, 受到了{damage}点伤害!, 还剩{self.blood}滴血..')
        if self.blood <= 0:
            print(f'{self.name} 你被 {monster.name}杀死了; 胜败乃兵家常事, 请重新来过!')
            return True
        else:
            return False

monster.py

from random import randint
class Montser(object):
    def __init__(self, name, blood, strength):
        self.name = name
        self.blood = blood
        self.strength = strength

    def take_damage(self, hero):
        damage = randint(hero.strength - 5, hero.strength + 5)
        self.blood -= damage
        print(f'{self.name}{hero.name}攻击, 受到了{damage}点伤害!, 还剩{self.blood}滴血..')
        if self.blood <= 0:
            print(f'{self.name}{hero.name}杀死了')
            return True
        else:
            return False

测试

# 导入
from hero import Hero
from monster import Montser
if __name__ == '__main__':
    h1 = Hero("鲁班", 1000, 300)
    m1 = Montser("大龙", 5000, 50)
    while True:
        is_moster_died = m1.take_damage(h1)
        if is_moster_died:
            break
        is_hero_died = h1.take_damage(m1)
        if is_hero_died:
            break

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:36:49  更:2022-04-18 17:42:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:23:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码