19、Python:面向对象编程:对象的创建与操作

Python作为一门面向对象的编程语言,提供了丰富的特性来支持对象的创建与操作。本文将详细介绍如何在Python中实例化对象、访问其属性与方法,以及如何利用特殊方法来增强对象的功能。

1. 对象的实例化

构造函数 __init__

构造函数__init__是一个特殊的方法,用于在创建类的新实例时初始化对象的状态。

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model
创建类的实例

要创建一个类的实例,只需调用类名并传递所需的参数。

my_car = Car('Toyota', 'Corolla')

2. 对象的属性与方法

访问属性

对象的属性可以通过点.操作符来访问。

print(my_car.brand)  # 输出: Toyota
调用方法

对象的方法也可以通过点.操作符来调用。

class Car:
    # ... (前面的代码)
    def display_info(self):
        print(f'This car is a {self.brand} {self.model}.')

my_car.display_info()  # 输出: This car is a Toyota Corolla.

3. 对象的特殊方法

__str____repr__

__str____repr__是两个用于定义对象的“官方”和“非官方”字符串表示的特殊方法。

class Car:
    # ... (前面的代码)
    def __str__(self):
        return f'{self.brand} {self.model}'
    
    def __repr__(self):
        return f'Car(brand="{self.brand}", model="{self.model}")'

my_car = Car('Toyota', 'Corolla')
print(my_car)  # 输出: Toyota Corolla
print(repr(my_car))  # 输出: Car(brand="Toyota", model="Corolla")
运算符重载

运算符重载允许我们定义操作符(如+-等)对类实例的行为。

class Car:
    # ... (前面的代码)
    def __add__(self, other):
        return f'{self.model} and {other.model} are both {self.brand} cars.'

car1 = Car('Toyota', 'Corolla')
car2 = Car('Toyota', 'Camry')
print(car1 + car2)  # 输出: Corolla and Camry are both Toyota cars.
完整的例子:
# 定义一个名为Car的类,代表汽车对象
class Car:
    # 构造函数 __init__ 用于在创建类的实例时初始化对象的属性
    def __init__(self, brand, model):
        self.brand = brand  # 实例属性 brand,表示汽车品牌
        self.model = model  # 实例属性 model,表示汽车型号

    # 实例方法 display_info 用于打印汽车的信息
    def display_info(self):
        # 使用f-string格式化字符串,包含品牌和型号信息
        print(f'This car is a {self.brand} {self.model}.')

    # 特殊方法 __str__ 定义对象的字符串表示,当使用print打印对象时调用
    def __str__(self):
        # 返回汽车品牌和型号的字符串表示
        return f'{self.brand} {self.model}'
    
    # 特殊方法 __repr__ 定义对象的“官方”字符串表示,通常用于调试
    def __repr__(self):
        # 返回创建这个对象的Python表达式字符串
        return f'Car(brand="{self.brand}", model="{self.model}")'

    # 特殊方法 __add__ 用于定义两个Car类实例相加时的行为
    def __add__(self, other):
        # 检查另一个对象是否也是Car类的实例
        if isinstance(other, Car):
            # 返回两个汽车型号的组合字符串
            return f'{self.model} and {other.model} are both {self.brand} cars.'
        else:
            # 如果另一个对象不是Car类的实例,抛出TypeError
            raise TypeError('Both objects must be Car instances to add them.')

# 创建Car类的实例 my_car,传递品牌和型号作为参数
my_car = Car('Toyota', 'Corolla')
# 调用实例方法 display_info 打印汽车信息
my_car.display_info()  # 输出: This car is a Toyota Corolla.

# 使用print函数打印 my_car 对象,会调用 __str__ 方法
print(my_car)  # 输出: Toyota Corolla
# 使用repr函数打印 my_car 对象的“官方”字符串表示,会调用 __repr__ 方法
print(repr(my_car))  # 输出: Car(brand="Toyota", model="Corolla")

# 创建另一个Car类的实例 another_car
another_car = Car('Toyota', 'Camry')
# 使用 + 运算符将 my_car 和 another_car 相加,会调用 __add__ 方法
print(my_car + another_car)  # 输出: Corolla and Camry are both Toyota cars.

以上代码展示了如何在Python中定义类、创建对象、访问属性、调用方法以及使用特殊方法。

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

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

相关文章

嵌入式RTOS面试题目

用过哪些嵌入式操作系统?使⽤RTOS和裸机代码开发有什么区别(优缺点)? 之前的⼀个项⽬是采⽤裸机代码开发的,写起来还⾏,通过状态机来管理业务逻辑和各种外设。 但是随着外设的增加,任务之间的…

【WEB前端2024】简单几步制作web3d《萌宠星球》智体节点模板(2)

【WEB前端2024】简单几步制作web3d《萌宠星球》智体节点模板(2) 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体…

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀(暴⼒求解)(可能会超时): 算法思路: 算法代码: 4.解法⼆(排序双指针): 算法思路: 以输入: nums …

2024年5月12日(星期天)骑行海囗

2024年5月12日 (星期天)骑行海口,早8:30到9:00大观公园门口集合,9:30准时出发【因迟到者,骑行速度快者,可自行追赶偶遇。】 偶遇地点:大观公园门口集合 ,家住东,西,南,北…

wangEditor富文本编辑器与layui图片上传

记录&#xff1a;js 显示默认的wangEditor富文本编辑器内容和图片 <style>body {background-color: #ffffff;}.layui-form-select dl{z-index:100000;} </style> <div class"layui-form layuimini-form"><div class"layui-form-item"…

MT3034 算术招亲

跟MT3033新的表达式类似&#xff0c;只多了一个括号合法性的判断 #include <bits/stdc.h> using namespace std; const int N 40; bool tag[N]; bool is_op(char c) {return c || c - || c * || c / || c ^; } int priority(char op) { // 优先级排序if (op ||…

数据结构-线性表-应用题-2.2-9

线性表&#xff08;a1,a2,a3,...,an&#xff09;中的元素递增有序且按顺序存储于计算机内。要求设计一个算法&#xff0c;用最少的时间在表中查找数值为x的元素&#xff0c;若找到&#xff0c;则将其与后继元素位置相交换&#xff0c;若找不到&#xff0c;则将其插入表中并使表…

钉钉开放平台创建企业内部H5微应用或者小程序

前言&#xff1a; 在当今企业数字化转型的浪潮中&#xff0c;创建企业内部H5微应用或小程序已成为提升工作效率和促进内部沟通的重要举措。发话不多说本文将介绍如何利用钉钉平台快速创建这些应用&#xff0c;让企业内部的工作更加便捷高效。 步骤 1.在浏览器打开链接…

618好物大放送:5大必买好物,抢购倒计时开始!

嘿&#xff0c;各位购物达人们&#xff0c;年度最燃购物盛宴618已经进入准备阶段&#xff0c;是不是已经开始摩拳擦掌&#xff0c;准备迎接这场消费的狂欢了呢&#xff1f;每年的这个时候&#xff0c;各大电商平台都会推出力度空前的优惠活动&#xff0c;从数码尖货到生活日用品…

Python运维-文本处理、系统和文件信息监控、外部命令

本节主要目录如下&#xff1a; 一、文本处理 1.1、Python编码解码 1.2、文件操作 1.3、读写配置文件 1.4、解析XML文件 二、系统信息监控 2.1、监控CPU信息 2.2、监控内存信息 2.3、监控磁盘信息 2.4、监控网络信息 2.5、获取进程信息 2.6、实例&#xff1a;常见的…

CentOS操作

1.如何修改主机名 方法一&#xff1a; 修改命令&#xff1a;hostnamectl set-hostname 主机名 查看命令&#xff1a;hostname 方法二和方法三都是永久改变主机名&#xff0c;需要密码验证 方法二 修改命令&#xff1a;nmcli general hostname 主机名 查看命令&#xff…

[图解]SysML和EA建模住宅安全系统-02

1 00:00:00,900 --> 00:00:02,690 这个就是一个块定义图了 2 00:00:03,790 --> 00:00:04,780 简称BDD 3 00:00:05,610 --> 00:00:08,070 实际上就是UML里面的类图 4 00:00:08,080 --> 00:00:09,950 和组件图的一个结合体 5 00:00:13,150 --> 00:00:14,690 我…

正点原子i.MX 93开发板,双核A55+M33+NPU,双路RS485FDCAN千兆网,异核/AI/工业开发!

正点原子i.MX 93开发板新品上市&#xff01;双核A55M33NPU&#xff0c;双路RS485&FDCAN&千兆网&#xff0c;异核/AI/工业开发&#xff01; NXP的i.MX系列是一系列面向多媒体和工业应用的ARM架构微处理器。从i.MX6U到i.MX93&#xff0c;这一系列经历了显著的发展&#x…

指代消解类方法梳理

概念&#xff1a; MLM&#xff1a;带遮罩的语言模型 NSP&#xff1a;单句预测&#xff0c;任务包括两个输入序列 SBO&#xff1a;分词边界目标 1.spanBERT&#xff0c;2019 spanBERT是对bert从分词到文本跨度的优化&#xff0c;主要有两方面的优化&#xff1a;&#xff08…

Stable Diffusion Ai绘画模型推荐:二次元Coriander_Mix v1大模型推荐

负tag嵌入式:EasyNegative,badhandv4 此模型经测试是写实偏3D的效果 画质灰暗的话请加&#xff1a;VAE840000 或者负tag&#xff1a;(watermark:2),(blurry:2),fat,paintings,sketches,(worst quality:2),(low quality:2),(normal quality:2),((monochrome)), ((grayscale))…

iOS xib布局

1.多次启动发现启动图和截屏的图片不一致,设置launch storyboard 不能到顶部 https://blog.csdn.net/u011960171/article/details/104053696/ 2.multipiler是比例&#xff0c;需要控制顺序1.视图&#xff0c;2父视图&#xff0c;选择宽度比例&#xff0c;默认是1 3.Aspect R…

python爬虫(二) 之 42号网汽车文章爬虫

python爬虫&#xff08;二&#xff09; 之 42号网汽车文章爬虫 今天在咸鱼上有个买家找我一个42号网汽车文章的爬虫&#xff0c;目前需求已经做完了&#xff0c;现在将这部分代码开源&#xff0c;供大家参考。爬虫能够抓取到网站上所有文章的数据&#xff0c;大概一小时左右就…

超越Scratch的梦 用心打造商业系统图形编程体验

在一个阳光明媚的上午&#xff0c;卧龙和凤雏正在公司会议室激烈地讨论着图形化编程产品在商业系统开发中的应用和改进。会议室里摆放着一些电脑和投影仪&#xff0c;方便他们展示和演示相关的内容。 “你知道图形化编程在商业系统开发中没有被广泛应用的原因吗&#xff1f;”卧…

libcity笔记:libcity/evaluator/traj_loc_pred_evaluator.py

1 构造函数 2 _check_config 检查配置是否符合评估器的要求&#xff0c;确保评估过程能够顺利执行 3 collect 4 evaluate 5 save_result & clear

创建禁止操作区域并且添加水印

css 设置 &#xff1a; 引用换成自己就好 .overlay {z-index: 1000;cursor: none; /*设置为不可点击*/user-select: none; /*设置为不可选择*/contenteditable: false; /*设置为不可编辑*/draggable: false; /*设置为不可拖动*/position: absolute;top: 0;left: 0;width: 100…
最新文章