Python学习 -- 根类object

在Python编程中,所有的类都继承自一个根类,名为object。这个根类提供了许多基本的特性和方法,为其他类的创建和使用提供了基础。本文将深入探讨object类,介绍其重要特性和用法,并通过代码示例进行详细解释。

1. 什么是object类:

object是Python中所有类的基类。它是一个内置的根类,其他所有类都隐式地或显式地继承自它。object类为所有对象提供了通用的方法和属性。

2. object类的特性:

构造函数 __init__: object类的构造函数,虽然没有特别有用的功能,但在子类中定义自己的构造函数时,需要调用super().__init__()来确保object类的初始化被执行。

字符串表示方法 __str__: object类定义了用于返回对象字符串表示的方法。可以在子类中重写这个方法来自定义对象的字符串表示。

属性访问方法 __getattr__ 和 __setattr__: 这些方法允许在属性被访问或设置时插入自定义的行为。当属性不存在时,__getattr__会被调用。

对象比较方法 __eq__ 和 __ne__: 这些方法用于定义对象之间的相等性和不相等性。默认情况下,它们比较对象的标识,但可以在子类中进行自定义。

哈希方法 __hash__: 用于定义对象的哈希值,通常与字典、集合等数据结构相关。

布尔值方法 __bool__: 定义对象的布尔值,通常用于条件语句中。

class CustomClass(object):
    def __init__(self, value):
        self.value = value


    def __str__(self):
        return f"CustomClass instance with value: {self.value}"


    def __getattr__(self, name):
        if name == "extra":
            return "This is an extra attribute."
        else:
            raise AttributeError(f"'CustomClass' object has no attribute '{name}'")


    def __eq__(self, other):
        if isinstance(other, CustomClass):
            return self.value == other.value
        return False


    def __hash__(self):
        return hash(self.value)


    def __bool__(self):
        return bool(self.value)


# 创建对象
obj1 = CustomClass(42)
obj2 = CustomClass(42)
obj3 = CustomClass(99)


# 调用方法和访问属性
print(obj1)  # 调用__str__
print(obj1.extra)  # 调用__getattr__
print(obj1 == obj2)  # 调用__eq__
print(hash(obj1))  # 调用__hash__


# 布尔值判断
if obj1:
    print("obj1 is True")
else:
    print("obj1 is False")


if not obj3:
    print("obj3 is False")
else:
    print("obj3 is True")

3. object类的代码示例:

下面是一个简单的代码示例,展示了如何使用object类的一些特性:

class CustomClass(object):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return f"CustomClass instance with value: {self.value}"
    def __getattr__(self, name):
        if name == "extra":
            return "This is an extra attribute."
        else:
            raise AttributeError(f"'CustomClass' object has no attribute '{name}'")
    def __eq__(self, other):
        if isinstance(other, CustomClass):
            return self.value == other.value
        return False
    def __hash__(self):
        return hash(self.value)
    def __bool__(self):
        return bool(self.value)
# 创建对象
obj1 = CustomClass(42)
obj2 = CustomClass(42)
obj3 = CustomClass(99)
# 调用方法和访问属性
print(obj1)  # 调用__str__
print(obj1.extra)  # 调用__getattr__
print(obj1 == obj2)  # 调用__eq__
print(hash(obj1))  # 调用__hash__
# 布尔值判断
if obj1:
    print("obj1 is True")
else:
    print("obj1 is False")
if not obj3:
    print("obj3 is False")
else:
    print("obj3 is True")

结论:

object类是Python中所有类的根类,为其他类的创建和使用提供了基础。通过了解和利用object类的特性,可以更好地理解类的继承关系和行为,同时也能够更灵活地定制自己的类。在实际编程中,理解object类的功能对于编写清晰、可维护的代码是至关重要的。

 

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

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

相关文章

C++day3(类、this指针、类中的特殊成员函数)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.类的应用实例 #include <iostream> using namespace std;class Person { private:string name; public:int age;int high;void set_name(string n); //在类内声明函数void show(){cout << "na…

【Linux】序列化与反序列化

目录 前言 什么是应用层&#xff1f; 再谈"协议" 什么是序列化和反序列化 网络版计算器 整体流程实现 Sock.hpp的实现 TcpServer.hpp的实现 Protocol.hpp的实现 CalServer.cc的编写 CalClient.cc的编写 整体代码 前言 本章是属于TCP/UDP四层模型中的第一层…

使用 Python编程: 下载 YouTube 音频的桌面应用程序

最近我开发了一个使用 Python 编写的桌面应用程序&#xff0c;可以方便地下载 YouTube 音频。该应用程序使用了 wxPython、yt_dlp 和 tqdm 库&#xff0c;提供了一个简单直观的用户界面&#xff0c;并具备高效的下载功能。 C:\pythoncode\new\youtube-dl-audio.py 程序介绍 …

Java实现根据关键词搜索当当商品列表数据方法,当当API接口申请指南

要通过当当网的API获取商品列表数据&#xff0c;您可以使用当当开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过当当开放平台API获取商品列表&#xff1a; 首先&#xff0c;确保您已注册成为当当开放平台的开发者&#xff0c;并创建…

Ansible学习笔记10

1、在group1的被管理机里的mariadb里创建一个abc库&#xff1b; 1&#xff09; 然后我们到agent主机上进行检查&#xff1a; 可以看到数据库已经创建成功。 再看几个其他命令&#xff1a; #a组主机重启mysql&#xff0c;并设置开机自启 ansible a -m service -a "namemy…

Hive-启动与操作(2)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

初始react和使用——事件处理、样式处理和组件

一、react官网 1、官网下载 官网分别有中英文两种&#xff1a; 中文官网&#xff1a;React 官方中文文档 – 用于构建用户界面的 JavaScript 库 英文官网&#xff1a;https://reactjs.org/ 2、react简介 react是用于构建用户界面的JavaScript库&#xff0c;起源于Facebook的…

【【STM32分析IO该设置什么模式的问题】】

STM32分析IO该设置什么模式的问题 我们分析而言 我们对于PA0 的设计就从此而来 对于边沿触发的选择我们已经有所了解了 我们下拉&#xff0c;但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发 而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以…

WordPress(3)会员插件安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、服务器中上传插件二、使用步骤1.启动插件前言 提示:会员插件的安装不能在网站后台插件中心中直接安装原因我还没有排查 原因:会导致网站停止运行 一、服务器中上传插件 二、使用步骤 …

Servlet的使用(JavaEE初阶系列17)

目录 前言&#xff1a; 1.Servlet API的使用 1.1HttpServlet 1.2HttpServletRequest 1.3HttpServletResponse 2.表白墙的更新 2.1表白墙存在的问题 2.2前后端交互接口 2.3环境准备 2.4代码的编写 2.5数据的持久化 2.5.1引入JDBC依赖 2.5.2创建数据库 2.5.3编写数…

根据身高重建队列【贪心算法】

根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

设计模式的使用——模板方法模式+动态代理模式

一、需求介绍 现有自己写的的一套审批流程逻辑&#xff0c;由于代码重构&#xff0c;需要把以前的很多业务加上审批的功能&#xff0c;再执行完审批与原有业务之后&#xff0c;生成一个任务&#xff0c;然后再统一处理一个任务&#xff08;本来是通过数据库作业去处理的&#x…

项目开发尺寸像素问题

一般来说 项目开发开始会固定页面尺寸 一般都是1920x1080像素 那这样开发是最简单的我们直接用设计图的像素来开发就行 不用管有什么滚动条 一般浏览器都会有边框什么的 所以会出现滚动条 当我们全屏状态下其实才是我们想要页面结果 如果我们想没有滚动条开发 首先我们要知道…

rke安装k8s

1、修改集群中各物理机主机名hostname文件 # 查看 cat /etc/hostname # 命令修改 hostnamectl set-hostname k8s-master2、实现主机名与ip地址解析 # 查看cat /etc/hosts # 修改 vi /etc/hosts3、配置ip_forward过滤机制 # 修改 vi /etc/sysctl.conf net.ipv4.ip_forward1…

使用element-ui中的el-table回显已选中数据时toggleRowSelection报错

最近在写一个后台&#xff0c;需要在表格中多选&#xff0c;然后点击编辑按钮的时候&#xff0c;需要回显已经选中的表单项 <el-table v-loading"loading" :data"discountList" :row-key"(row) > row.id" refmultipleTable selection-cha…

【pyqt5界面化工具开发-11】界面化显示检测信息

目录 0x00 前言&#xff1a; 一、布局的设置 二、消息的显示 0x00 前言&#xff1a; 我们在10讲的基础上&#xff0c;需要将其输出到界面上 思路&#xff1a; 1、消息的传递 2、布局的设置 先考虑好消息的传递&#xff0c;再来完善布局 其实先完善布局&#xff0c;再来设置消…

树多选搜索查询,搜索后选中状态仍保留

<template><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input v-model&qu…

Breakpad交叉编译aarch64

原本是在mac os上编译的&#xff0c;但是会出现一些问题&#xff0c;因此还是开了台linux容器进行编译&#xff0c;本文可结合之前的linux下编译breakpad共同查看。 Linux下Breakpad编译_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/130754480?…

北京985学校,交叉学科考英一数三408

北京师范大学(B) 考研难度&#xff08;☆☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1096字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 北…

Gradio使用介绍

与他人分享你的机器学习模型、API或数据科学工作流的最佳方式之一&#xff0c;就是创建一个交互式应用程序&#xff0c;让用户或同事可以在他们的浏览器中尝试演示,Gradio是创建提供了用非常方便的方式快速创建一个前端交互应用&#xff0c;那如何使用Gradio呢&#xff1f;因为…