如何在Python中表示一个对象

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案 hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案。 阅读详情

在Python中一切都是对象。如果要在Python中表示一个对象,除了定义class外还有哪些方式呢?我们今天就来盘点一下。

1.dict

字典或映射存储KV键值对,它对查找、插入和删除操作都有比较高效率。用一个dict对象可以非常容易的表示一个对象。dict的使用也很灵活,可以修改、添加或删除属性。

>>> student={
'name':'jack',
'age':18,
'height':170
}
>>> student
{'name': 'jack', 'age': 18, 'height': 170}
# 查看属性
>>> student['name']
'jack'
# 添加属性
>>> student['score']=89.0
>>> student
{'name': 'jack', 'age': 18, 'height': 170, 'score': 89.0}
# 删除属性
>>> del student['height']
>>> student
{'name': 'jack', 'age': 18, 'score': 89.0}

2.tuple

tuple也可以表示一个对象,相对于dict来说,它是不可变的,一旦创建就不能随意修改。tuple也只能通过下标来访问对象的属性,因此当属性比较多时使用起来没有dict方便。

# 对象属性为name、age、height
# 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
# 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
>>> student=('jack',18,170.0)
>>> student
('jack', 18, 170.0)
>>> student[1]
18
# tuple不能修改
>>> student[2]=175.0
TypeError: 'tuple' object does not support item assignment

3.collections.namedtuple

顾名思义namedtuple就是命名元组。它是tuple数据类型的扩展,同样地一旦创建,它的元素也是不可变的。与普通元组相比命名元组可以通过“属性名”来访问元素。

>>> from collections import namedtuple
>>> Point = namedtuple('Point','x,y,z')
>>> p = Point(1,3,5)
>>> p
Point(x=1, y=3, z=5)
>>> Point = namedtuple('Point','x y z')
>>> p = Point(1,3,5)
>>> p
Point(x=1, y=3, z=5)
>>> p.x
1
>>> p.y = 3.5
AttributeError: can't set attribute
# 可以看出通过namedtuple定义对象,就是一个class类型的
>>> type(p)
<class '__main__.Point'>

对于一个简单的对象,我们使用namedtuple很方便的来定义,它比定义一个普通class要有更好的空间性能。

4 type.NamedTuple

Python3.6中新增了type.NamedTuple类,它与collections.namedtuple的操作是类似的。不过,要定义NamedTuple就稍微不一样了。

>>> from typing import NamedTuple
# 定义Car类,继承于NamedTuple,并定义属性color、speed、autmatic
# 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
# 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
>>> class Car(NamedTuple):
	color:str
	speed:float
	automatic:bool

	
>>> car = Car('red',120.0,True)
>>> car
Car(color='red', speed=120.0, automatic=True)
>>> type(car)
<class '__main__.Car'>
# tuple都是不可变的
>>> car.speed = 130.0
AttributeError: can't set attribute

5.types.SimpleNamespace

使用SimpleNamespace也可以很方便的定义对象。它的定义等价于

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__

例如定义一个Car对象

# 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
# 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
>>> car = SimpleNamespace(color='blue',speed=150.5,automatic=True)
>>> car
namespace(automatic=True, color='blue', speed=150.5)
>>> car.color
'blue'
>>> car.speed = 120
>>> car
namespace(automatic=True, color='blue', speed=120)
# 动态添加属性
>>> car.shift = 23
>>> car
namespace(automatic=True, color='blue', shift=23, speed=120)
# 删除属性
>>> del car.shift
>>> car
namespace(automatic=True, color='blue', speed=120)

6.struct.Struct

这是一个结构体对象,可以把C语言中的struct序列化成Python对象。例如处理文件中的二进制数据或从网络中请求的数据,可以使用这个struct.Struct来表示。

使用struct好处是数据格式是预先定义好的,可以对数据进行打包成二进制数据,空间效率会好很多。

# 定义一个struct,'1sif'表示数据的格式,1s一个字符长度,i表示整数,f表示浮点数
>>> Student=Struct('1sif')
# 使用pack方法打包数据,存储性别、年龄、身高
>>> stu = Student.pack(b'm',18,175.0)
>>> stu
b'm\x00\x00\x00\x12\x00\x00\x00\x00\x00/C'
# unpack方法解包
>>> Student.unpack(stu)
(b'm', 18, 175.0)

7. class

class当然是定义一个对象的标准方式了。在Python定义类也非常简单,除了可以定义属性还可以定义方法。

>>> class Student:
	def __init__(self,name,age,height):
		self.name = name
		self.age = age
		self.height = height
	
	def printAge(self):
	    print(self.age)

		
>>> stu = Student('jack',18,175.0)
# 如果想让定义的对象输出属性信息可以重写__repr__方法
>>> stu
<__main__.Student object at 0x10afcd9b0>
>>> stu.name
'jack'
>>> stu.age = 19

8.总结一下

本文盘点Python中定义对象各种的方法,除了class,还有有dict、tuple、namedtuple、NamedTuple、SimpleNamespace和Struct。

  • 如果一个对象属性不多可以使用tuple;
  • 如果一个对象属性不可变可以考虑使用namedtuple或NamedTuple;
  • 如果一个对象要转成JSON进行传输可以使用dict;
  • 如果考虑比较空间性能,可以使用Struct。
YOLOv5改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天) 本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。 阅读详情

相关推荐

机器学习西瓜书期末复习(2022HENU)

期末复习之机器学习 文章目录期末复习之机器学习第一章 绪论 第一章 绪论 机器学习的定义 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。 根据训练数据是否拥有标记信息,将学习任务分为监督学习和无监督学习。 监督学习 :分类和回归 线性回归、对数几率回归、决策树、支持向量机、贝叶斯分类器、神经网络 无监督学习:聚类 聚类算法: 原型聚类:(k均值,学习向量量化,高斯混合聚类);密度聚类(DBSVAN);层次聚类(AGNES)。降维。话题分析。图分

qq_46561559的博客 2万+

在PYTHON中如何创建一个对象?

在Python中,可以通过定义一个类来创建一个对象。类是一个表示对象属性和方法的模板或蓝图,对象则是类的实例。

2301_78263023的博客 1248

3D缺陷检测实战:从点云处理到工业质检优化

本文深入探讨了3D缺陷检测在工业质检中的实战应用,详细阐述了从点云处理到深度学习模型部署的完整技术链路。文章通过PCB焊点检测等实际案例,分析了3D视觉相比2D检测在识别深度、形状等缺陷方面的优势,并分享了点云滤波、分割、特征提取以及利用YOLOv5等模型进行高效检测的优化心得与落地挑战。

weixin_28358083的博客 338

自学Python 25 定义并使用类和对象

Python 面向对象编程技术(二) 文章目录Python 面向对象编程技术(二)一、定义一个类二、类的基本用法三、对象 一、定义一个类 在Python程序中,把具有相同属性和方法的对象归为一个类,例如可以将人类、动物和植物看作是不同的“类”。在使用类之前必须先创建这个类,定义类的语法格式如下所示: class ClassName: 语句 class:是定义类的关键字 ClassName:是这个类的名称,Python语言规定,类的首字母大写。 二、类的基本用法 在Python程序中,类只有被

江南赴艽野的博客 1343

ETL第八章无人售货机零售项目实践

ETL实战项目——无人售货机

m0_52058217的博客 4418

Android Framework之Pkms详解

system 用户并没有访问应用程序目录的权限,但是 Installd 服务是以 root 用户启动的,可以访问 /data/data/ 下的目录,Installd 需要完成一些创建应用数据的任务。Installer 服务是 Android 提供的用于安装的服务,Installer 持有 Installd 守护进程对应的 Binder 服务的代理对象,本质上是通过 Binder 通信调用底层的 Installd 服务真正完成 APK 文件格式的优化和转换、建立相关的数据目录、删除文件、安装应用等工作。

门徒07的博客 1843

php7兼容spilit_php7.2 不向后兼容的改动

做一个简单的总结,没有涵盖全部改动,因为不常见。1. number_format()不会返回-0因为-0这种写法很古怪,所以number_format(-0.01),会返回0。2. 对数组强制转成对象时,会将整形key转成string直接看代码,$a = [0 => 1]; $a = (object)$a; print_r($a->{0}); //或者 print_r($a->{...

weixin_39968724的博客 244

云端办公文件存储与访问全攻略:选型、预算、实操一本通

随着远程办公、多设备协作成为常态,“文件云端存储、随时调用” 已成为提升办公效率的核心需求。本文从用户实际场景出发,系统拆解云端存储的选型逻辑、全场景费用预算,重点解答 “文件能否直接在线打开” 的核心疑问,并提供实操技巧与安全保障方案,覆盖个人、小团队(含兼职)、企业全维度需求,帮助不同规模用户快速搭建高效、低成本的云端办公体系。

hy行者勇哥的博客 1242

Python中的类的定义和对象的创建

面向对象中两个重要的概念: 1.类 :对一类事物的描述,是抽象的、概念上的定义。比如做石膏像的模型 2.对象:实际存在的该类事物的每个个体,因而也称实例(instance)。比如石膏像 二者的关系:对象是由类派生的、创建的。一个类可以创建无穷多个对象,每个对象都属于类。 1.创建类和创建类对象 1.创建类,类主要由类名,属性,方法组成,当然创建一个类时,属性和方法可以选择的。 cla...

涤生大数据 3万+

HFSS实战项目——GPS北斗双模微带天线

本文设计了一款方形圆极化微带天线应用于北斗B1和GPSL1频段,满足高增益、低VSWR、适当方向图等要求。设计中心频率为1568MHz,介质板采用厚度h=1.6mm的Arlon AD450(tm)板,相对介电常数为4.5,采用探针馈电。

2401_87464239的博客 1769

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1114

python声明类和对象_python之类和对象(一)

python之类和对象(一)一、类和对象1、类和对象的定义1)在某些个体之间具有相同的特征和行为,称为一个类2)对象:类的实例化,指具体的某个东西,是一类事物中的个体(成员)2、类的命名规范1)首字母需要大写,驼峰式命名2)类名需要做到见名知意,提高代码的可读性3、类的定义(关键字class)第一种:class 类名:第二种:class 类名():第三种:class 类名(object):三种方式...

weixin_39778668的博客 1314

[明道云] -基础教学5- 明道云 40 种控件详解与场景解析

明道云工作表提供40种业务控件,涵盖文本、数值、关联、公式等类型,支持各类业务场景。文本类支持多行输入、正则校验;数值/金额类提供进度条、百分比显示等功能;关联类实现多表数据引用;公式/函数类支持复杂逻辑运算;自动化类包括打印模板、API调用等控件。合理使用这些控件可提升数据收集质量和自动化效率,同时需注意控件联动的性能影响和权限配置。关键控件包括关联记录、级联选择、公式计算等,适用于订单管理、客户信息关联等业务场景。

每日出拳老爷子的博客 8542

python中表示当前对象_在Python中表示一个对象的方法

在Python 中一切都是对象。如果要在Python 中表示一个对象,除了定义class 外还有哪些方式呢?我们今天就来盘点一下。0x00 dict字典或映射存储KV 键值对,它对查找、插入和删除操作都有比较高效率。用一个dict 对象可以非常容易的表示一个对象。dict 的使用也很灵活,可以修改、添加或删除属性。>>> student={'name':'ja...

weixin_42404710的博客 740

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

如何在Python中表示一个对象!

关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。 Github: https://github.com/hylinux1024 微信公众号:终身开发者(angrycode) 在 Python中一切都是对象。如果要在 Python中表示一个对象,除了定义 class...

Pythoncxy的博客 404

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python中对象的方法_在Python中表示一个对象的方法

在 Python 中一切都是对象。如果要在 Python 中表示一个对象,除了定义 class 外还有哪些方式呢?我们今天就来盘点一下。0x00 dict字典或映射存储 KV 键值对,它对查找、插入和删除操作都有比较高效率。用一个 dict 对象可以非常容易的表示一个对象。 dict 的使用也 很灵活,可以修改、添加或删除属性。>>> student={'name':'jack','age':18...

weixin_39673051的博客 84

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

在python里怎么表示_如何在Python中表示一个对象

关于我一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。微信公众号:终身开发者(angrycode)在Python中一切都是对象。如果要在Python中表示一个对象,除了定义class外还有哪些方式呢?我们今天就来盘点一下。0x00 dict字典或映射存储KV键值对,它对查找、插入和删除...

weixin_39955925的博客 357

python 对象_如何在Python中表示一个对象

关于我一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。Github:https://github.com/hylinux1024微信公众号:终身开发者(angrycode)在Python中一切都是对象。如果要在Python中表示一个对象,除了定义class外还有哪些方式呢?我们今天就来...

weixin_39762478的博客 130

python中立方表示_在Python中表示一个对象的方法

在Python 中一切都是对象。如果要在Python 中表示一个对象,除了定义class 外还有哪些方式呢?我们今天就来盘点一下。0x00 dict字典或映射存储KV 键值对,它对查找、插入和删除操作都有比较高效率。用一个dict 对象可以非常容易的表示一个对象。dict 的使用也很灵活,可以修改、添加或删除属性。>>> student={'name':'jack'...

weixin_39751076的博客 866

python设计一个表示动物的类_python面向对象 动物园 例题

一个动物园有十个房间,里面有两种动物,老虎、羊。老虎的体重是200斤,羊体重100斤。游戏开始之前,在10个房间里面,随机放入老虎和羊。游戏这的目标是要把羊和老虎喂的越重越好。游戏开始后,系统随机给出房间号。游戏者开始必须弄清楚,每个房间是老虎还是羊,方法是敲房间门,里面的动物都会叫,老虎叫声‘wow!!!’,羊叫声是‘mie’。动物每叫一次体重减5斤。喂老虎应该输入单词meet,喂羊应该输入单词...

weixin_39762666的博客 1009

python中表示当前对象_有没有Python中的函数来打印一个对象的所有当前的属性和值...

匿名用户1级2016-07-04 回答1. 你是两个不同的事情真的混在一起。使用dir()或inspect模块让你有兴趣(什么__builtins__作为一个例子,你的任何对象,而不是)。>>> l = dir(__builtins__)>>> d = __builtins__.__dict__打印该字典但是看上你喜欢:>>> print l[...

weixin_31041955的博客 238

Python面向对象基础练习——设计一个名为 MyRectangle 的矩形类来表示矩形

面向对象设计施一个程序员发展的”分水岭“,很多初学者,就是因为无法理解“面向对象“而放弃,这个Python小练习对于刚学习”面向对象“的同学,敲一遍巩固类的应用,敲两遍加深构造方法和实例对象的印象。 要想在编程这条路上走得比别人更远,就一定要掌握面向对象编程技术。记住:多敲!多练!多反思!

qq_73458040的博客 2426

python编写一个类表示平面坐标系中的一个点,点对象应该有计算该点到原点之间的距离的方法,并编写测试代码验证点类

【开发该软件的操作系统】:windows10 【软件开发环境/开发工具】:PyCharm 【编程语言】:Python 【开发目的】:这是老师布置的作业啦~ 供初学者参考学习 【开发者】:江西农业大学2020级大二学生 题目要求: 编写一个类表示平面坐标系中的一个点,点对象应该有计算该点到原点之间的距离的方法,并编写测试代码验证点类。 代码如下: import math class Point: def __init__(self, x0 = 3, y0 = 4):

当路danglu0010 2572

python---面向对象:定义一个表示学生信息的类Student要求如下:(1)类Student的成员变量:sNO表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示

定义一个表示学生信息的类Student要求如下: (1)类Student的成员变量:sNO表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。 (2)类Student的方法成员:getNo():获得学号;getName():获得姓名;getSex():获得性别;getAge()获得年龄;getJava():获得Java 课程成绩 (3)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输

qq_45072087的博客 8789

python在交互模式下直接输入对象后回车,调用的是对象的__repr__()方法,这个方法表示的是一个编码,用print+对象是调用对象的__str__方法...

交互模式下调用对象的__repr__()方法,这个方法表示的是一个编码 >>> u"国庆节快乐"u'\u56fd\u5e86\u8282\u5feb\u4e50' 用print+对象是调用对象的__str__方法>>> print u"国庆节快乐"国庆节快乐>>> 定义一个类,重写__repr__和__str__方法 &...

weixin_30491641的博客 229
上一篇: python实现验证码与进度条
下一篇: 一文搞懂Python中的所有数组数据类型
Python热爱者
博客等级 码龄7年 3059粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值