【Python】类与对象


知识目录

  • 一、写在前面✨
  • 二、类与对象简介
  • 三、Car类的实现
  • 四、Date类的实现
  • 五、总结撒花😊

一、写在前面✨

大家好!我是初心,希望我们一路走来能坚守初心!

今天跟大家分享的文章是 Python中面向对象编程的类与对象。 ,希望能帮助到大家!本篇文章收录于 初心 的 Python从入门到精通 专栏。

🏠 个人主页:初心%个人主页
🧑 个人简介:大家好,我是初心,和大家共同努力
💕欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信😘

💕 长大后就忘了吗?曾经拥有的梦想。』—— 藤子不二雄「哆啦A梦」

二、类与对象简介

Python 是一种面向对象的编程语言。

Python 中的几乎所有东西都是对象,拥有属性和方法。

类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。

如需创建类,请使用 class 关键字:(例如)

class MyClass:
  x = 5
  • init() 函数

上面的例子是最简单形式的类和对象,在实际应用程序中并不真正有用。

要理解类的含义,我们必须先了解内置的 init() 函数。

所有类都有一个名为 init() 的函数,它始终在启动类时执行。

类定义不能为空,但是如果您处于某种原因写了无内容的类定义语句,请使用 pass 语句来避免错误。

三、Car类的实现

编程要求:按注释要求完成下列car类的实现。

class Car:
    '''
    >>> deneros_car = Car('Tesla', 'Model S')
    >>> deneros_car.model
    'Model S'
    >>> deneros_car.gas
    30
    >>> deneros_car.gas -= 20 # The car is leaking gas
    >>> deneros_car.gas
    10
    >>> deneros_car.drive()
    'Tesla Model S goes vroom!'
    >>> deneros_car.drive()
    'Cannot drive!'
    >>> deneros_car.fill_gas()
    'Gas level: 20'
    >>> deneros_car.gas
    20
    >>> Car.gas
    30
    >>> Car.gas = 50 # Car manufacturer upgrades their cars to start with more gas
    >>> ashleys_car = Car('Honda', 'HR-V')
    >>> ashleys_car.gas
    50
    >>> ashleys_car.pop_tire()
    >>> ashleys_car.wheels
    3
    >>> ashleys_car.drive()
    'Cannot drive!'
    >>> brandons_car = Car('Audi', 'A5')
    >>> brandons_car.wheels = 2
    >>> brandons_car.wheels
    2
    >>> Car.num_wheels
    4
    >>> brandons_car.drive() # Type Error if an error occurs and Nothing if nothing is displayed
    'Cannot drive!'
    >>> Car.drive(brandons_car) # Type Error if an error occurs and Nothing if nothing is displayed
    'Cannot drive!'
    >>> brandons_car.color
    'No color yet. You need to paint me.'
    >>> brandons_car.paint('yellow')
    'Audi A5 is now yellow'
    '''


    def __init__(self, make, model):


    def paint(self, color):


    def drive(self):


    def pop_tire(self):


    def fill_gas(self):

	# Edit Your Code Here

import doctest
doctest.testmod()

具体实现:

# 定义类变量 gas 初始值为30
gas = 30
# 定义车轮初始数为4
wheels = 4
num_wheels = 4
# 初始化车品牌和车型
def __init__(self, make, model):
    self.make = make
    self.model = model
    self.color = 'No color yet. You need to paint me.'
def paint(self, color):
    self.color = color
    return self.make+' '+self.model+' is now %s'%self.color
def drive(self):
    if (self.gas > 0 and self.wheels == self.num_wheels):
        # 每次开车耗油10
        self.gas -= 10
        return 'Tesla Model S goes vroom!'
    else:
            # 如果油量不足或者车轮数不足都不能开车
        return 'Cannot drive!'
def pop_tire(self):
    # 将轮胎数减少1
    self.wheels -= 1
def fill_gas(self):
    # 加油一次加20,返回剩余油量
    self.gas += 20
    return 'Gas level: %d' % self.gas

四、Date类的实现

编程要求:date类实现年月日的-、+、==、repr方法。


class MyDate:
    """
    >>> MyDate(2023, 5, 4) == MyDate(2023, 5, 4)
    True
    >>> MyDate(2023, 5, 7) - MyDate(2023, 1, 4)
    123
    >>> MyDate(2024, 2, 29) + 365
    MyDate(2025, 2, 28)
    >>> MyDate(2025, 2, 28) - MyDate(2024, 2, 29)
    365
    >>> MyDate(2024, 12, 31) + 2
    MyDate(2025, 1, 2)
    """
    # Edit Your Code Here
    
    def __init__(self, year, month, day):
        

    def __add__(self, numofdays):

    
    def __sub__(self, other):

    
    def __eq__(self, other):
        
    
    def __repr__(self):
        
    
import doctest
doctest.testmod()

具体实现:


# 日期转换工具
from dateutil import parser
# 日期时间库
from datetime import timedelta, datetime

class MyDate:

    def __init__(self, year, month, day):
        # 判断月、日是否小于10,如果小于10就加上'0'
        if (month < 10):
            month = '0' + str(month)
        else:
            month = str(month)
        if (day < 10):
            day = '0' + str(day)
        else:
            day = str(day)
        year = str(year)
        # 将日期格式确定为'xxxx-xx-xx'
        self.date = year + '-' + month + '-' + day

    def __add__(self, numofdays):
        # 将字符串格式的日期转换为 datetime 类型
        date_obj = datetime.strptime(self.date, '%Y-%m-%d').date()
        # 加上 days 得到 新的 datetime 对象
        date = date_obj + timedelta(days=numofdays)
        # 返回新的 MyDate 对象
        return MyDate(date.year, date.month, date.day)
    
    def __sub__(self, other):
        # 得到相差的天数
        days = (parser.parse(self.date) - parser.parse(other.date)).days
        return days
    
    def __eq__(self, other):
        if isinstance(other, MyDate):
            if self.date == other.date:
                return True
            else:
                return False
    
    def __repr__(self):
        # 返回字符串
        date_obj = datetime.strptime(self.date, '%Y-%m-%d').date()
        return "MyDate(%d, %d, %d)"%(date_obj.year,date_obj.month,date_obj.day)

五、总结撒花😊

本文主要讲解了Python中基础的面向对象编程。😊

这就是今天要分享给大家的全部内容了,我们下期再见!😊

🏠 本文由初心原创,首发于CSDN博客, 博客主页:初心%🏠

🏠 我在CSDN等你哦!😍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unreal Niagara粒子入门2

本次学习一下如何将Niagara参数暴露给蓝图、材质编辑器、粒子不同阶段。 1.暴露参数给蓝图 首先在左侧Parmeters参数面板的User Exposed处创建参数&#xff1a; 然后将参数拖入到想要绑定的粒子字段上&#xff0c;例如这里绑定给粒子发射数&#xff1a; 在调用粒子时&#…

【iOS】—— Tagged Pointer对象

文章目录 关于Tagged PointerNSTaggedPointer示例TaggedPointer 结构Tagged Pointer特点注意事项isa指针64位下的isa指针优化 本来打算细看一下weak的底层原理&#xff0c;看到了出现了很多次Tagged Pointer对象&#xff0c;就先来学一下Tagged Pointer&#xff0c;在之前刚学习…

Sentinel流控规则

1.Sentinel流控规则简介 1.1.基本介绍 1.2.进一步解释说明 资源名&#xff1a;唯一名称&#xff0c;默认请求路径。针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;默认default&#xff08;不区分来源&#xff09;。阈值类型/单机阈…

Linux 企业级安全原理和防范技巧

Linux 企业级安全原理和防范技巧 1. 企业级Linux系统防护概述1.1 企业级Linux系统安全威胁1.2 企业级Linux系统安全立体式防范体系1.2.1 Linux文件系统访问安全1.2.2 Linux进程安全1. 进程的种类2. 进程管理方法 1.2.3 Linux用户管理安全1. 管理用户及组文件安全2. 用户密码管理…

基于SSM的土家风景文化管理平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 前言…

孤儿僵尸守护进程

孤儿僵尸守护进程 1. 孤儿进程&#xff1a;2. 僵尸进程&#xff1a;3. 守护进程&#xff1a;(重点) 1. 孤儿进程&#xff1a; 父进程退出,还没退出的子进程就变成了孤儿进程 不要怕,还有爷爷进程init: 孤儿进程将被init进程所收养&#xff0c;并由init进程对它们完成状态收集…

MySQL主从复制配置

一、MySQL主从概念二、主库配置&#xff08;Master&#xff09;第一步:修改Mysql数据库的配置文件/etc/my.cnf第二步:重启Mysql服务 systemctl restart mysqld第三步:登录Mysql数据库&#xff0c;执行下面SQL第四步:登录Mysql数据库&#xff0c;执行下面SQL&#xff0c;记录下结…

解决node上传文件乱码问题终极方案

问题描述 今天在菜鸟教程学习node上传文件时遇到了一个中文乱码的问题&#xff0c;文件名包含中文就会显示乱码&#xff0c;上传到服务器的文件名也是乱码。试了两个方法都不行&#xff0c;最后还是问了万能的度娘才解决。 我做了一个非常简单的上传文件的界面&#xff0c; …

介绍10款ChatGPT替代产品

ChatGPT 引领着聊天 AI 的世界&#xff0c;许多人已经开始在日常生活中使用它。OpenAI 的 GPT-3 语言模型是聊天机器人的基础&#xff0c;它使得用户能够通过回答问题与 AI 进行交互。 GPT-4 的引入为机器人提供了更强大的功能。然而&#xff0c;它也有一个明显的缺点&#xff…

19-02 基于业务量级的架构技术选型演进

从零开始——单服务应用 单体应用技术选型 &#xff08;GitHub、Gitee…&#xff09;搜索是否有线程的产品用最熟悉的技术&#xff0c;最快的速度上线如果有经费&#xff1a;考虑商业化解决方案 个人小程序怎么做技术选型的 搜索是否有快速搭建下程序的软件技术选型 后端技…

python 网络编程和http协议--网络编程,HTTP协议,Web服务器

一.网络编程 1.IP地址 给网络中的每一台设备进行编号. IPV4 IPV6 2.端口和端口号 端口的作用就是给运行的应用程序提供传输数据的通道。 端口号的作用是用来区分和管理不同端口的&#xff0c;通过端口号能找到唯一个的一个端口。 3.TCP协议 协议: 双方的约定. 网络传输协…

代码线程安全

线程生命周期 synchronized synchronized会自动释放锁 synchronized同步代码块 synchronized后面括号里obj是锁对象(保证唯一)&#xff1b;static修饰的obj对象是自定义MyThread线程类的静态成员变量&#xff0c;该自定义线程类所有实例共享保证锁对象唯一性&#xff1b;另一…

博客系统的后端设计(八) - 实现发布博客功能

文章目录 发布博客1. 约定前后端交互接口2. 服务器代码3. 客户端代码4. 出现的问题 发布博客 在原来的编辑页面点击发布文章按钮&#xff0c;是不会有什么效果的。 这是因为此时还不能实现前后端的交互。 1. 约定前后端交互接口 请求使用 POST&#xff0c;路径是 /blog title这…

Niagara—— Niagara Editor界面

目录 一&#xff0c;菜单栏 二&#xff0c;工具栏 三&#xff0c;预览面板 四&#xff0c;参数面板 五&#xff0c;系统总览面板 六&#xff0c;暂存区面板 七&#xff0c;选择面板 八&#xff0c;时间轴面板 九&#xff0c;曲线面板 十&#xff0c;日志面板 十一&a…

通过js来判断是否是横屏如果是就自刷新页面解决横屏之后只有屏幕一半宽度的问题

判断页面是横屏还是竖屏 window.addEventListener("load", rotate, false);window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", rotate, false);function rotate() {if (window.orientatio…

力扣高频SQL50题(基础版)——第一天

力扣高频SQL50题(基础版)——第一天 1 可回收且低脂的产品 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # WHERE子句中使用多条件 SELECT product_id FROM Products WHERE low_fatsY AND recyclableY1.3 运行截图 2 寻找用户推荐人 2.1 题目内容…

《数据库应用系统实践》------ 小区停车管理系统

系列文章 《数据库应用系统实践》------ 小区停车管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&…

第13届蓝桥杯Scratch选拔赛真题集锦

第13届蓝桥杯Scratch选拔赛真题集锦 编程题 第 1 题问答题 跳舞机游戏 题目说明 编程实现 跳舞机游戏。 具体要求: 1).点击绿旗,舞台左上角显示得分0代表玩家分数,在得分右侧倒计时10代表游戏时长(10s) 2).游戏开始倒数计时,在舞台上随机显示上、下、左、右四个箭头中…

SCMA基本原理介绍

SCMA: Sparse Code Multiple Access SCMA基本原理 我们考虑一个同步&#xff08;synchronous&#xff09;的SCMA系统&#xff0c; 含1个基站&#xff08;Base Station, BS&#xff09;&#xff1b; J J J个用户&#xff08;so called layers&#xff09;&#xff1b;K个OFDM…

vue2介绍(入门)

目录 声明式渲染 v-bind v-if条件与循环 name命名 学会log打印 一些js方法 双向绑定v-model和v-bind 那么请实现一个复选框吧 自定义标签模板 声明式渲染 我感觉这里文档的意思是双向绑定&#xff0c; 或许需要清理一下js缓存机制 &#xff0c;嗯...不懂,响应式&…