【Python详解】Python类的详细定义与使用案例

在这里插入图片描述
大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我!

本文目录

  • 前言
  • 一、定义类
  • 二、类的实例化
  • 三、类的方法
  • 四、类的继承
  • 五、类的初始化_init()函数
  • 六、类的实例属性
  • 七、类的访问限制
  • 总结


前言

在Python中,类是一种具有相同属性和方法的对象的抽象。在创建类的实例之前,需要先定义类。一旦定义了类,就可以通过创建其实例来访问其属性和方法。

Python中,类是一种用户自定义的数据类型,它可以表示具有相同属性和方法的对象的集合。以下是Python中类的相关知识点和概念。

一、定义类

类的定义:类通常使用class关键字来定义,类名通常使用首字母大写的驼峰命名法。类的定义一般包括属性和方法。

例如:


class MyClass:  # 类的属性  my_attribute = 0  # 类的方法  def my_method(self):  print("Hello World")

二、类的实例化

在完成类的定义后,实际上并不会立即创建一个实例。这就像是一份汽车的蓝图。蓝图可以展示汽车的外观,但本身并不是一辆汽车。你无法直接驾驶蓝图,它只能用来指导真正汽车的建造,而且可以用它来制造多个汽车实例。那么,如何创建类的实例呢?

类的实例化:在创建类的实例时,需要使用类名来调用。创建类的实例可以使用以下语法:

例如:


my_object = MyClass()

这将创建一个名为my_object的类的实例,并将它分配给变量my_object。

需要注意的是:class语句本身并不创建该类的任何实例。所以在类定义完成以后,需要我们进行创建类的实例,即实例化该类的对象。这一点跟Java中的对象或者C++的对象很像,因为都是面向对象的语言。

三、类的方法

方法是类的行为,它可以被多个实例调用。在类中定义方法时,需要在方法名前面添加一个self参数,它代表实例本身。


class MyClass:  # 类的属性  my_attribute = 0  # 类的方法  def my_method(self):  print("Hello World")

在这个例子中,my_method是一个类的方法,它可以通过实例来调用。例如:my_object.my_method()。

四、类的继承

继承是Python中一个重要的概念,它可以让一个类继承另一个类的属性和方法。子类可以通过继承父类的属性和方法来减少代码量。在定义子类时,可以在括号中指定父类。

class ParentClass:  # 父类的属性  my_attribute = 0  # 父类的方法  def my_method(self):  print("Hello World")  class ChildClass(ParentClass):  # 子类的属性  my_child_attribute = 0  # 子类的方法  def my_child_method(self):  print("Hello Children")  
```在这个例子中,ChildClass继承了ParentClass的属性和方法,同时还有自己的属性和方法。子类可以通过super()函数调用父类的方法。例如:super().my_method()

五、类的初始化_init()函数

在创建类之后,类通常会自动创建一个名为__init__()的方法。这个方法是Python中的一个特殊方法,类似于其他编程语言中的构造函数。每当创建一个类的新实例时,Python会自动调用它。

init()方法必须包含一个名为self的参数,这个参数是实例本身的引用,可以用来访问类中的属性和方法。在__init__()方法中,可以设置实例的初始状态,定义实例的行为和行为规则。


class MyClass:  def __init__(self, arg1, arg2):  self.arg1 = arg1  self.arg2 = arg2  self.my_method()  def my_method(self):  print("Hello World")

在这个例子中,MyClass定义了一个__init__()方法,它接受两个参数arg1和arg2。在实例化MyClass时,可以传递这两个参数的值,例如:


my_object = MyClass("foo", "bar")

这将创建一个名为my_object的实例,并调用它的构造函数__init__()。构造函数将设置实例的初始状态,即arg1和arg2的值,并调用my_method()方法打印"Hello World"。

在方法调用时会自动传递实际参数self。因此,当__init__()方法只有一个参数时,在创建类的实例时,就不需要指定参数了。

六、类的实例属性

Python中的实例属性是指属于某个类的实例的属性,是与实例相关的属性。Python中的实例属性是指属于某个类的实例的属性,是与实例相关的属性。实例属性可以通过实例来访问和修改,每个实例可以有自己独特的实例属性。

下面是一个简单的Python代码示例,演示了如何定义一个类和实例属性:


class Person:  def __init__(self, name, age):  self.name = name  # 实例属性  self.age = age  # 实例属性  def say_hello(self):  print("Hello, my name is", self.name)  person1 = Person("Alice", 25)  # 创建Person类的实例1  
person2 = Person("Bob", 30)  # 创建Person类的实例2  person1.say_hello()  # 调用实例方法,输出 "Hello, my name is Alice"  
person2.say_hello()  # 调用实例方法,输出 "Hello, my name is Bob"

在这个例子中,定义了一个名为Person的类,它有两个实例属性:name和age。在构造函数__init__()中,使用self.name和self.age来初始化实例属性。在创建Person类的实例时,可以通过传递name和age参数的值来设置每个实例的属性。

通过实例来访问实例属性,可以使用实例变量名后面加上点号和属性名的方式,例如person1.name和person2.age。在这个例子中,通过调用实例方法say_hello()来输出每个实例的名称。

修改实例属性也是通过点号语法进行的,例如person1.name = “Charlie"将把person1的名称修改为"Charlie”。

通过实例属性和实例方法,我们可以在Python中轻松地创建和操作对象实例。

注意:实例属性只能通过实例名访问。

七、类的访问限制

在类内部可以定义属性和方法,外部则可以直接调用属性和方法来操作数据,从而隐藏了类内部的复杂逻辑。然而,Python并没有对属性和方法的访问权限进行限制。为了确保类内部的某些属性和方法不被外部访问,可以在属性和方法名前面添加单下划线(_foo)、双下划线(__foo)或者首尾加双下划线(foo)来限制访问权限。

单下划线的限制是最弱的,它仅表示该属性或方法只适用于类内部使用,子类也可以访问它。双下划线表示该属性或方法是私有的,不能被外部访问,也不能被子类继承。而首尾双下划线表示该属性或方法是极其私有的,只有类本身可以访问,连子类也不能访问。

下面是一个示例代码:


class MyClass:  def __init__(self):  self._public_attribute = 0  self.__private_attribute = 1  self.__hidden_attribute = 2  def _public_method(self):  pass  def __private_method(self):  pass  def __hidden_method(self):  pass  my_object = MyClass()  
print(my_object._public_attribute)  # 可以直接访问  
print(my_object._public_method())  # 可以直接调用  
# print(my_object.__private_attribute)  # 无法访问私有属性  
# my_object.__private_method()  # 无法调用私有方法

首尾双下划线表示定义特殊方法,一般是系统定于名字,如__init__()。

以单下划线开头的表示protected(保护)类型的成员,只允许类本身或子类访问,但不能使用“ from module import”的相关语句导入使用。

__foo:双下划线表示private(私有)类型的成员,只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可以通过“类的实例名.类名 __xxx”方式访问。

例如,创建一个Swan类,定义保护属性__neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性__neck_swan,代码如下:


class Swan:"""天鹅类"""__neck_swan = "脖子很长"  //这里创建了私有的属性def __init__(self):print("__init__():", Swan.__neck_swan)swan = Swan()  # 创建Swan类
print("加入类名:", swan._Swan__neck_swan)
print("直接访问:", swan.__neck_swan)

总结

Hello,各位看官老爷们好,洲洲已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。

📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论、行业大佬创业杂谈等等。

📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体变现、前沿科技文章分享、论文精读等等。

📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个技术大佬!也随时欢迎您跟我沟通,一起交流,一起成长。变现、进步、技术、资料、项目、你想要的这里都会有

📝网络的风口只会越来越大,风浪越大,鱼越贵!欢迎您加入社群~一个人可以或许可以走的很快,但一群人将走的更远!

📝关注我的公众号(与CSDN同ID:程序员洲洲)可以获得一份Java 10万字面试宝典及相关资料!~

📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~

在这里插入图片描述

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

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

相关文章

对于 Spring MVC 了解? SpringMVC 的执行流程?SpringMVC 的核心是什么?请求的流程是怎么处理的?控制反转怎么实现的?

对于 Spring MVC 了解? 之前 Model1 和 Model2 这两个没有 Spring MVC 的时代。 Model1 时代 : 整个 Web 应用几乎全部用 JSP 页面组成,只用少量的 JavaBean 来处理数据库连接、访问等操作。 JSP 既是控制层又是表现层,存在很多问题,如①将…

阿里云ECS扩容硬盘空间及文件系统

一.通过阿里云控制台扩容硬盘 前往ECS实例详情页面的云盘页签。 登录ECS管理控制台。在左侧导航栏,选择实例与镜像 > 实例。在顶部菜单栏处,选择目标ECS实例所在地域。找到待扩容云盘所在的实例,单击实例ID。在实例详情页面,单…

android studio 添加并读取json配置文件

第一步&#xff1a;在android studio中添加json文件&#xff1b; 第二步&#xff1a;读取文件的函数 private String[] getJosnData(){String result[] null;List<String> list new ArrayList<>();try {//获取本地的Json文件AssetManager assetManager mConte…

解析Java类加载的运行机制和双亲委派模型

类加载运行机制 类加载形如把.class文件&#xff0c;加载到内存中&#xff0c;得到类对象这样的过程 类加载一共分为五个步骤&#xff1a; 加载验证准备解析初始化 加载 类加载的第一步是将编译好的 Java 类的字节码文件加载到 Java 虚拟机&#xff08;JVM&#xff09;中。类…

阿里云:机器学习平台及OpenSearch

机器学习流程 相关项目 BladeDISC-AI编译优化 EasyRec-推荐算法库 EasyCV-视觉图像算法库 EasyNLP-NLP/多模态算法库 模型开发中算法团队面临的工程挑战 Develop platform OpenSearch 向量检索库

1.4 MVP矩阵

MVP矩阵代表什么 MVP矩阵分别是模型&#xff08;Model&#xff09;、观察&#xff08;View&#xff09;、投影&#xff08;Projection&#xff09;三个矩阵。 我们的顶点坐标起始于局部空间&#xff08;Local Space&#xff09;&#xff0c;在这里他成为局部坐标&#xff08;L…

【大语言模型】LLM应用程序的新兴体系结构

LLM应用程序的新兴体系结构 LLM应用栈设计模式&#xff1a;In-context learningData Preprocessing/EmbeddingPrompt Construction/RetrievalPrompt Execution/Inference What about agents?展望参考资料 大型语言模型是构建软件的强大新基元。但由于它们非常新颖且与常规计算…

J2EE集合框架Map

目录 一.Map特点 1.无序&#xff0c;键值对&#xff0c;键不能重复&#xff0c;值可以重复 2.键重复则覆盖&#xff0c;没有继承Collection接口 二.遍历方式 1.拿到key,再拿值2.拿到映射关系&#xff0c;键值都有 取出保存所有Entry的Set,再遍历此Set即可 三.HashMap与H…

【数据结构】树与二叉树(上)

目录 前言&#xff1a; 一、树&#xff1a; 1.树的概念&#xff1a; 2.树的相关概念&#xff1a; 3.树的表示&#xff1a; 4.书的实际使用场景&#xff1a; 二、二叉树&#xff1a; 1.二叉树的概念&#xff1a; 2.两种特殊二叉树&#xff1a; ①.满二叉树&#xff1a;…

C++图形开发(16):绘制一个圆环和一根针

文章目录 绘制一个圆环和一根针1.1 绘制1.2 line()函数1.3 circle()函数1.4 setlinestyle()函数1.5 setlinecolor()函数 接下来&#xff0c;我会继续制作一些小游戏&#xff0c;但因为整个难度的上升&#xff08;毕竟我也是初学者&#xff09;&#xff0c;可能文章不会再像之前…

Can转RTU网关can总线转以太网设备

YC-CAN-RTU 是一款用于 CAN-Modbus 现场总线与 RS-232 总线或 RS-485 总线之间数据转换的协议型转换器&#xff0c;支持标准 Modbus RTU 协议。集成 1 路RS-232 通道、1 路RS-485 通道、1 路CAN-Modbus 通道&#xff0c;可以方便地嵌入使用 RS-232 接口和 RS-485 接口的节点上&…

openGauss学习笔记-08 openGauss 数据类型

文章目录 openGauss学习笔记-08 openGauss 数据类型8.1 数值类型8.2 布尔类型8.3 字符类型8.4 二进制类型8.5 日期/时间类型8.6 几何类型8.7 网络地址类型8.8 位串类型8.9 文本搜索类型8.10 UUID数据类型8.11 JSON/JSONB类型8.12 HLL数据类型8.13 范围类型8.14 索引8.15 对象标…