python中的类和对象的基本概念记录

1.python中的类和对象的概念

1.1 类也是对象

  • python中的一切皆对象 ,所以python中的类 也是对象。

    这与c++是不同的,c++的类在实例化为对象之前是没有意义的,编译器也不会为其分配内存。

  • python中的类 即使不实例化为对象,也可以单独使用。
  • 是一种 对象 所以类可以拥有属于自己的定义 方法属性

1.2 类的定义示例

如下是一个类的示例,大家可以先看一下这个类,对于语法在此不过多描述,这个类包含如下元素:

  • python中所有的类都继承 object 类
    class Person(object):	# 显示的说明这个类继承object类
    class Person:			# 没有指定父类,即使没有写,这个类也默认继承 object 类
    
  • 公有/私有 类 属性/方法
  • 公有/私有 对象 属性/方法
  • 公有/私有的静态方法
  • 对象的构造方法 _init_
    • 在 例化对象时自动调用, 用于 绑定初始化 对象属性。
    • _init_ 是一种特殊的写法,叫这个名字的就是构造方法
  • 公有/私有的概念,类似与 c++中的 private/public
  • python中的 属性/方法 的名称以 双下划线 __ 开始,则这个 属性 或者方法即为 私有的
class Person(object):# 公有的类属性,这个属性是属于类的,# 公有属性于c++中的public变量,可以通过类名访问这个属性species = "人类"# 私有类属性,这个属性是属于类的。# 私有属性类似于c++中的private变量,只能在类方法中使用,外部不能访问。__class_private_attr = "这是私有类属性,只能在类方法中使用"# 构造方法,类似c++的构造函数,在例化对象时自动调用def __init__(self, name, age):# 公有对象属性,这些属性是属于对象的的。# 公有属性于c++中的public变量,可以通过属性名访问这个属性self.name = nameself.age = age# 私有对象属性# 私有属性类似于c++中的private变量,只能在对象的方法中使用。self.__private_attr = "这是私有对象属性,只能在对象的方法中使用"# 公有类方法,类方法定义需要使用修饰器@classmethod@classmethoddef get_species(cls):return cls.species# 私有类方法,类方法定义需要使用修饰器@classmethod@classmethoddef __get_class_private_attr(cls):return cls.__class_private_attr# 公有对象方法def introduce(self):print(f"大家好,我是{self.name},今年{self.age}岁。")# 私有对象方法def __private_method(self):print("这是私有对象方法")# 公有静态方法@staticmethoddef is_adult(age):return age >= 18# 私有静态方法@staticmethoddef __is_child(age):return age < 18# 创建对象
person = Person("张三", 25)# 访问公有对象属性
print(person.name)  # 张三
print(person.age)  # 25# 尝试访问私有对象属性(会报错)
# print(person.__private_attr)# 调用公有对象方法
person.introduce()  # 大家好,我是张三,今年25岁。# 尝试调用私有对象方法(会报错)
# person.__private_method()# 访问公有类属性
print(Person.species)  # 人类# 尝试访问私有类属性(会报错)
# print(Person.__class_private_attr)# 调用公有类方法
print(Person.get_species())  # 人类# 尝试调用私有类方法(会报错)
# print(Person.__get_class_private_attr())# 调用公有静态方法
print(Person.is_adult(25))  # True
print(Person.is_adult(16))  # False# 调用私有静态方法(会报错)
# print(Person.__is_child(10))

2.类的属性/方法, 对象的属性/方法, 和静态方法的关系

2.1 类属性和对象属性

  • 类属性是属于类本身的,所有对象共享这些属性(对象对类属性只能读不能写)。
    • 通过 类名 访问 类对象 是可读可写的。
    • 通过 对象名 访问 类对象是只能读不能写的,并且如果对象有同名属性,会遮蔽 类属性
    • 如果通过 对象名 修改 类对象,则会创建并绑定一个同名的 对象属性,然后 同名的 对象属性 会屏蔽类属性。
  • 对象属性是属于每个对象独有的。
    • 对象属性只有在实例化时才会被绑定,在此之前是不存在的,对象属性只能通过对象名访问,不能通过类名访问。

2.2 类方法和对象方法

  • 类方法 的第一个参数是 类对象,一般使用 cls 命名, 类似与c++中的this指针,始终指向类对象 。
    • 类方法 可以通过 类名 或者 对象名 进行访问。
    • 类方法 中可以访问 类属性类方法 。 但不能访问 对象方法对象属性 的。
  • 对象方法的第一个参数是 对象本身 , 一般使用 self 命名代表当前对象,类似与c++中的this指针,始终指向对象本身。
    • 对象方法 只能通过 对象名 调用, 不能通过类名调用。
    • 对象方法 中可以访问 对象属性对象方法类属性类方法

2.3 静态方法

  • 静态方法不需要cls或self参数,可以独立存在。
  • 静态方法可以通过类名或对象名调用。
  • 静态方法更像是一个定义在类作用域中的普通方法。

2.4 理解总结

  • 我们可以站在时间的角度理解 类对象属性/方法静态方法对象的属性/方法
    • 类也是一种对象,在定义类的的时候 类对象属性/方法静态方法 就已经被创造了。
    • 在例化对象的时候对象的属性/方法才会被创造
    • 类对象属性/方法静态方法 在时间上是先于 类对象属性/方法 的,
    • 所以通过 类名 是不能访问 对象属性/方法 的,类方法 也不能访问 对象方法/属性,因为这个时候 对象方法/属性 还没有被创造。
    • 在对象被创造的时候,类一定被创造了,所以可以通过对象名访问属于 类的属性/方法 静态方法

3. 类的继承

3.1 类的继承示例

class Parent1(object):def parent1_func(self):print("parent1_func")class Parent2(object):def parent2_func(self):print("parent2_func")class Son(Parent1, Parent2):def son_func(self):print("Son_func")son = Son()son.parent1_func()
son.parent2_func()

3.2 类继承

类继承的语法参见 3.1 的例子,对于类继承,记住下面三点即可

  • 所有的类默认继承自 object 类
  • 子类可以使用父类的方法和属性
  • 如果子类由同名的方法和属性,则会屏蔽父类的方法和属性;换句话说,自类可以重写父类的方法和属性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Star-CCM+自动网格执行方法与设置技巧

在Star中进行一个仿真项目时,有时会创建多个自动网格。网格创建结束后需要执行。在Star中,网格执行可以分为三种。分别是:单独执行操作;多个执行操作;全部执行操作。接下来将三种执行操作的方法与步骤进行介绍。 其次,如果不习惯用自定义控制网格,有时在一个项目中就会…

大模型+人工智能:重塑地方志管理的新力量

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到各个领域&#xff0c;改变着我们的工作和生活方式。特别是在地方志管理这一领域&#xff0c;大模型和人工智能的结合正在开启一场深刻的变革。今天&#xff0c;就让我们一起…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】梯度的反向传播算法

矩阵微积分&#xff08;Matrix Calculus&#xff09; 在开始之前&#xff0c;需要先了解矩阵微积分的一些计算规则。 首先&#xff0c;对于矩阵微积分的表示&#xff0c;通常由两种符号约定&#xff1a; 分母布局 标量关于向量的导数为列向量 向量关于标量的导数为行向量 N维…

LDR6500:手机电脑拓展坞转接器方案的卓越之选

随着科技的飞速发展&#xff0c;手机和电脑已成为我们日常生活中不可或缺的工具。然而&#xff0c;它们的接口有限&#xff0c;经常难以满足我们多样化的需求。这时&#xff0c;一款高效、稳定的拓展坞转接器就显得尤为重要。LDR6500&#xff0c;作为乐得瑞科技精心研发的USB P…

【计算机视觉(10)】

基于Python的OpenCV基础入门——图像滤波去噪 图像滤波去噪均值滤波中值滤波高斯滤波双边滤波方框滤波图像滤波去噪代码实现及其效果图 图像滤波去噪 图像滤波去噪是一种图像处理方法&#xff0c;它通过应用滤波器来减少或消除图像中的噪声。噪声是图像中不希望的、无用的、干…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后&#xff0c;将会出现以下对话框 &#xff1a; 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步&#xff0c;下一步&#xff1a; 下一步&#xff1a; 下一步&#xff0c;这里我…

Memcached:内存缓存的强大引擎及其深度解析

Memcached 是一个高性能、分布式内存对象缓存系统,用于减轻数据库负载、提高Web应用的响应速度和性能。它通过将数据存储在内存中,减少了对数据库的频繁访问,从而提高了数据读取的速度和效率。本文将详细介绍Memcached的工作原理、使用场景、安装与配置、性能优化及其与其他…

【LeetCode:2779. 数组的最大美丽值 + 排序 + 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【docker】如何解决artalk的跨域访问问题

今天折腾halo的时候&#xff0c;发现artalk出现跨域访问报错&#xff0c;内容如下。 Access to fetch at https://artk.musnow.top/api/stat from origin https://halo.musnow.top has been blocked by CORS policy: The Access-Control-Allow-Origin header contains multipl…

Kotlin编程实践-【Java如何调用Kotlin中带默认值参数的函数】

问题 如果你有一个带有默认参数值的 Kotlin 函数&#xff0c;如何从 Java 调用它而无须为每个参数显式指定值&#xff1f; 方案 为函数添加注解JvmOverloads。 也就是为Java添加重载方法&#xff0c;这样Java调用Kotlin的方法时就不用传递全部的参数了。 示例 在 Kotlin …

企业环保创A标准

在环保日益受到重视的今天&#xff0c;企业如何有效地进行环保管理&#xff0c;提高自身的环保水平&#xff0c;已成为一个不可忽视的议题。而企业环保创A标准&#xff0c;正是为了评估企业的环保水平和环保管理能力而制定的一项重要评价标准。朗观视觉小编将详细解析企业环保创…

XILINX 7系列XDMA使用_IP核介绍以及工程搭建

文章目录 一、XDMA IP核1.1、接口说明1.2、配置页说明 二、XDMA工程搭建2.1、BD搭建2.2 Linux下XDMA驱动安装2.3 Linux下使用XDMA进行数据传输 一、XDMA IP核 1.1、接口说明 sys_clk&#xff1a;主机给PCIE提供的时钟信号&#xff0c;通过原理图查看 sys_rst_n&#xff1a;主机…

【已解决】引入 element 组件无法使用编译错误 ERROR Failed to compile with 1 error

如果大家使用这个vue 配合 element 框架不熟练&#xff0c;当你顺利按照文档安装好 vue 和 element 的时候想要使用element 的组件时候确无法展示出来&#xff0c;甚至报错。不妨看看是不是这个问题&#xff0c; 1.首先使用element 的时候&#xff0c;前提是把必须要的 elemen…

TCGAbiolinks包学习

TCGAbiolinks 写在前面学习目的GDCquery GDCdownload GDC prepare中间遇到的报错下载蛋白质数据 写在前面 由于别人提醒我TCGA的数据可以利用TCGAbiolinks下载并处理&#xff0c;所以我决定阅读该包手册&#xff0c;主要是该包应该是有更新的&#xff0c;我看手册进行更新了&…

法国恐脱欧、陷金融危机!股指本周跌6.2%,创三年多最大跌幅

内容提要 法国财政部长警告称&#xff0c;左翼政党联盟若上台可能导致法国脱欧&#xff0c;而且无论极右翼还是左翼上台&#xff0c;都可能导致法国爆发金融危机。由于政坛风险高企&#xff0c;法国股市周五延续跌势&#xff0c;本周已经抹掉2100亿美元市值&#xff0c;几乎回…

[C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品

大家好&#xff0c;今天zty带来的是斗破苍穹的 2.11.6 版本&#xff0c;这个版本主要更新了&#xff1a;1、背包 2、将退出游戏改到了设置里面 3、如果不逃跑不会停止战斗。废话不多说&#xff0c; 先赞后看 养成习惯 code #include<stdio.h> #include<iostrea…

MySQL学习——创建MySQL Workbench中的Connections

在MySQL Workbench中&#xff0c;Connections&#xff08;连接&#xff09;是用户与MySQL数据库进行交互的桥梁。 本文将添加一个新连接&#xff0c;该连接可以是初始连接&#xff0c;也可以是附加连接。在开始之前&#xff0c;必须安装、启动MySQL服务器的实例&#xff0c;并…

Web前端开发UL:探索与解构列表的奥秘

Web前端开发UL&#xff1a;探索与解构列表的奥秘 在Web前端开发的广阔领域中&#xff0c;UL&#xff08;Unordered List&#xff0c;无序列表&#xff09;元素扮演着至关重要的角色。它不仅是页面布局的基础构件&#xff0c;更是提升用户体验和增强信息可读性的关键所在。今天…

LLM时代中的AI推理

问题与挑战 毫无疑问&#xff0c;AI是当下最热的话题之一&#xff0c;而大模型又是当前AI的主角。几年前&#xff0c;正当深度学习进入瓶颈时&#xff0c;以GPT为首的LLM的横空出世让之似乎又找到了“第二增长曲线”。当模型规模大到一定程度时&#xff0c;它所表现出来的涌现…

【单片机毕业设计选题24007】-基于STM32和阿里云的家庭健康数据监测系统

系统功能: 本课题设计是基于STM32单片机作为控制主体&#xff0c;通过HX711称重模块&#xff0c;HC-SR04超声波测距模块&#xff0c;红外测温&#xff0c;心率传感器等模块通过I2C或SPI接口与STM32进行通信&#xff0c;并读取传感器输出的身高&#xff0c;体重&#xff0c;心率…