Python 高级语法:一切皆对象
1 “一切皆对象”是一种核心设计哲学
在编程领域,特别是面向对象编程(OOP)中,“一切皆对象”是一种核心设计哲学。这种哲学主张,无论是数据、函数、还是更复杂的结构,都可以被视为对象,并赋予它们属性和行为。
程序员可以更加灵活、可重用、可维护和可扩展地编写代码。这种哲学使得程序能够更好地模拟现实世界中的事物和概念,提高了代码的质量和可维护性。
1.1 对象的概念
在OOP中,对象是一个封装了数据和操作这些数据的函数的实体。对象具有状态(由属性表示)和行为(由方法表示)。状态描述了对象在某个时刻的数据特征,而行为则定义了对象可以执行的操作。
1.2 对象作为基本单元
“一切皆对象”的哲学认为,应该将程序中的一切元素都视为对象。这意味着不仅是传统意义上的“事物”(如人、动物、汽车等),而且连数据结构(如数组、列表、树等)、函数、甚至更抽象的概念(如事件、时间、日志等)都可以被看作是对象。
1.3 属性和方法
每个对象都有一组属性,这些属性描述了对象的状态。同时,对象也包含一组方法,这些方法定义了对象可以执行的操作。通过封装属性和方法在一个对象中,可以更加清晰地表达现实世界的实体和它们的交互方式。
1.4 封装、继承和多态
“一切皆对象”的哲学与OOP的三个基本特性——封装、继承和多态密切相关。封装允许将对象的内部状态隐藏起来,只通过公共接口(即方法)与外部交互。继承允许创建层次结构,其中子类可以继承父类的属性和方法。多态则允许以统一的方式处理不同类型的对象。
1.5 灵活性和可重用性
通过将一切都视为对象,程序员可以更加灵活地组织和管理代码。对象可以被创建、销毁、复制、传递和修改,这为编程提供了极大的灵活性。此外,通过继承和多态,对象可以重用其他对象的代码,提高了代码的可重用性。
1.6 代码的可维护性和可扩展性
“一切皆对象”的哲学有助于提高代码的可维护性和可扩展性。通过将功能封装在对象中,并定义清晰的接口,可以更容易地理解和修改代码。当需要添加新功能或修改现有功能时,只需要修改相应的对象,而不会影响其他部分的代码。
1.7 现实世界映射
“一切皆对象”的哲学还强调将现实世界中的事物和概念映射到编程世界中。这种映射使得代码更加直观、易于理解,并且能够更好地模拟现实世界的行为和交互。
2 Python中的对象
在Python编程语言中,“一切皆对象”是一个核心的设计哲学。这意味着在Python中,几乎所有的内容都可以被视为对象,包括数字、字符串、列表、字典、函数、类等。
2.1 数字和字符串
在Python中,数字和字符串都是对象。这意味着你可以对它们调用方法,就像对其他对象一样。
num = 10
print(num.bit_length()) # 输出:4
bit_length()
: 返回一个整数的二进制表示所需的位数。
bytes_data = b'\x00\x0A'
num = int.from_bytes(bytes_data, byteorder='big')
print(num) # 输出:10
from_bytes(bytes, byteorder, *, signed=False)
: 类方法,从字节创建一个整数。
2.2 列表和字典
列表和字典也是对象,它们拥有丰富的方法和属性,可以用于操作和查询数据。
# 列表对象
list_obj = [1, 2, 3, 4, 5]
print(list_obj.append(6)) # 在列表末尾添加元素6,并返回None
print(list_obj) # 输出:[1, 2, 3, 4, 5, 6] # 字典对象
dict_obj = {"name": "Alice", "age": 30}
print(dict_obj.keys()) # 输出:dict_keys(['name', 'age'])
print(dict_obj.values()) # 输出:dict_values(['Alice', 30])
在上面的例子中,list_obj
是一个列表对象,dict_obj
是一个字典对象。它们都有自己的方法和属性,可以用于执行各种操作,如添加元素、获取键或值等。
2.3 函数和方法
在Python中,函数和方法也是对象。它们可以被赋值给变量,可以作为参数传递给其他函数,还可以作为返回值从函数中返回。
# 函数对象
def greet(name): return f"Hello, {name}!" # 将函数赋值给变量
greet_func = greet
print(greet_func("Bob")) # 输出:Hello, Bob! # 作为参数传递
def call_func(func, arg): return func(arg) print(call_func(greet, "Charlie")) # 输出:Hello, Charlie!
在上面的例子中,greet
是一个函数对象,它可以被赋值给变量greet_func
,并作为参数传递给call_func
函数。
2.4 类和对象
在Python中,类是创建对象的模板,而对象是类的实例。类本身也是对象,它们是type
类型的对象。
# 定义一个类
class Person: def __init__(self, name, age): self.name = name self.age = age def greet(self): return f"Hello, my name is {self.name} and I'm {self.age} years old." # 创建类的实例(对象)
alice = Person("Alice", 30)
print(alice.greet()) # 输出:Hello, my name is Alice and I'm 30 years old. # 类本身也是对象
print(type(Person)) # 输出:<class 'type'>
在上面的例子中,Person
是一个类对象,而alice
是Person
类的一个实例(对象)。你可以对alice
调用greet
方法,就像对其他对象一样。
Python的“一切皆对象”思想使得编程更加灵活和强大。通过将几乎所有内容都视为对象,并赋予它们方法和属性,Python简化了编程过程,提高了代码的可读性和可维护性。同时,这也使得Python成为一种非常适合学习和使用的编程语言。
相关文章:
Python 高级语法:一切皆对象
1 “一切皆对象”是一种核心设计哲学 在编程领域,特别是面向对象编程(OOP)中,“一切皆对象”是一种核心设计哲学。这种哲学主张,无论是数据、函数、还是更复杂的结构,都可以被视为对象,并赋予…...

python jupyter notebook打开页面方便使用
如果没安装jupyter, 请安装: pip install jupyter notebook 运行jupyter notebook jupyter-notebook...

音视频开发之旅(69)-SD图生图
目录 1. 效果展示 2. ControlNet介绍 3. 图生图流程浅析 4. SDWebui图生图代码流程 5. 参考资料 一、效果展示 图生图的应用场景非常多,比较典型的应用场景有风格转化(真人与二次元)、线稿上色、换装和对图片进行扩图等,下面…...
數據集成平台:datax將hive數據步到mysql(全部列和指定列)
數據集成平台:datax將hive數據步到mysql(全部列和指定列) 1.py腳本 傳入參數: target_database:數據庫 target_table:表 target_columns:列 target_positions:hive列的下標&#x…...

pikachu靶场-File Inclusion
介绍: File Inclusion(文件包含漏洞)概述 文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了&…...

[今天跟AI聊聊职场] ~你能接受你的直接领导能力不如你,年纪还比你小很多吗?
知乎问题: 弟弟今年35岁,刚换了一份工作,直接领导小A比他小5岁,各方面经验没有他成熟。难的工作都是弟弟在做,功劳都被直接领导小A抢走了,有时候还要被直接领导小A打压。弟弟感觉升职加薪无望。现在找工作不…...

网络原理TCP之“三次握手“
TCP内核中的建立连接 众所周知,TCP是有连接的. 当我们在客户端敲出socket new Socket(serverIp,severPort)时,就在系统内核就在建立连接 真正建立连接是在系统内核中建立的,我们程序员只是调用相关的api. 在此处,我们把TCP的建立连接称为三次握手. 系统在内核建立连接时如上…...

990-03产品经理与程序员:什么是 IT 与业务协调以及为什么它很重要?
What is IT-business alignment and why is it important? 什么是IT-业务一致性?为什么它很重要? It’s more important than ever that IT and the business operate from the same playbook(剧本). So why do so many organizations struggle to ach…...

Java Web(七)__Tomcat(二)
Tomcat工作模式 Tomcat作为Servlet容器,有以下三种工作模式。 1)独立的Servlet容器,由Java虚拟机进程来运行 Tomcat作为独立的Web服务器来单独运行,Servlet容器组件作为Web服务器中的一部分而存在。这是Tomcat的默认工作模式。…...

【项目实战】帮美女老师做一个点名小程序(Python tkinter)
前言 博主有一个非常漂亮的老师朋友😍。最近,她急需一个能够实现随机点名的小程序,而博主正好擅长这方面的技术🤏。所以,今天博主决定为她制作一个专门用于点名的小程序💪。 博主在美女老师面前吹完牛皮之…...
Elasticsearch 去重后求和
标题的要求可以用如下 SQL 表示 select sum(column2) from (select distinct(column1),column2 from table)t 要如何用 DSL 实现呢,先准备下索引和数据 PUT test_index {"mappings": {"properties": {"column1": {"type"…...
考研数学——高数:函数与极限(3)
函数的连续性与间断点 函数的连续性 左连续 右连续 区间上的连续性 在xo处连续 函数的间断点 第一类间断点(左右极限都存在) 可去间断点: f(xo-0)= f(xo+0) 跳跃间断点: f(xo-0)≠ f(xo+0) 第二类间断点(震荡间断点、无穷间断点)...
LeetCode49 字母异位词分组
LeetCode49 字母异位词分组 在这篇博客中,我们将探讨 LeetCode 上的一道经典算法问题:字母异位词分组。这个问题要求将给定的字符串数组中的字母异位词组合在一起,并以任意顺序返回结果列表。 问题描述 给定一个字符串数组 strs࿰…...

【Python】Windows本地映射远程Linux服务器上的端口(解决jupyter notebook无法启动问题)
创作日志: 学习深度学习不想在本地破电脑上再安装各种软件,我就用实验室的服务器配置环境,启动jupyter notebook时脑子又瓦特了,在自己Windows电脑上打开服务器提供的网址,那肯定打不开啊,以前在其它电脑上…...
C++面试:用户态和内核态的基本概念、区别
目录 一、基本概念 概念: 区别: 二、Windows示例 基础介绍 用户态到内核态的切换过程: 程序实例 三、Linux示例 特权级别: 用户态到内核态的切换过程: 调度和中断处理: 程序实例 总结 在操作系…...
Vue计算属性computed()
1. 计算属性定义 获取计算属性值 <div>{{ 计算属性名称}}</div>创建计算属性 let 定义的属性ref/reactive....let 计算属性名称 computed(() > {//这里写函数式,函数式里面包含定义属性//只有这个包含的定义属性被修改时才出发此函数式//通过计算属性名称co…...

JWT学习笔记
了解 JWT Token 释义及使用 | Authing 文档 JSON Web Token Introduction - jwt.io JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519)。该 token 被设计为紧凑…...

WSL里的Ubuntu 登录密码忘了怎么更改
环境: Win10 专业版 WSL2 如何 Ubuntu22.04 问题描述: WSL里的Ubuntu 登录密码忘了怎么更改 解决方案: 在WSL中的Ubuntu系统中,忘记了密码,可以通过以下步骤重置密码: 1.打开命令提示符或PowerShel…...

【软件测试面试】要你介绍项目-如何说?完美面试攻略...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试面试时&am…...
【Crypto | CTF】RSA打法 集合
天命:我发现题题不一样,已知跟求知的需求都不一样 题目一:已知 p q E ,计算T,最后求D 已知两个质数p q 和 公钥E ,通过p和q计算出欧拉函数T,最后求私钥D 【密码学 | CTF】BUUCTF RSA-CSDN…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...