Python中类的相关术语(附带案例)

目录

1、面向对象

2、类

3、实例

4、初始化方法

5、魔法方法

6、字符串方法

7、self

8、数据、属性、操作、行为

9、父类、基类、超类  or  子类、派生类

10、多态

11、重载多态  and  重写多态

12、名称解释

1、面向对象

        在Python中,面向对象编程(OOP)是一种非常重要的编程范式。在Python中,可以通过创建类(class)和实例化对象(object)来使用面向对象的编程思想。

        下面是一个简单的例子,People是一个类,__init__方法是一个魔法方法,在创建对象时被调用,用于初始化对象的属性。

class Person:
    def __init__(self, name):
        self.name = name


# 初始化实例
p1 = Person("小白")
print(p1.name)

2、类

        在Python中,类是一种用来创建对象的蓝图或模板。通过定义类,可以定义对象的属性和方法。

class 关键字用于定义一个类,在类的内部,你可以定义各种属性和方法。

  • 属性(attribute):类的属性是与该类相关联的数据。
  • 方法(method):类的方法是与该类相关联的函数。方法的第一个参数通常是 self,代表对当前对象的引用。

        通过类,可以创建对象的实例,并调用对象的方法来完成相关操作。

class Person:
    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name


# 定义一个实例
p1 = Person("小白")
# 实例拥有属性
print(p1.name)
# 通过实例调用类里面定义的函数方法
print(p1.get_name())

3、实例

        在Python中,实例是由类创建的对象。通过实例,可以使用类中定义的属性和方法。

        在上面的代码中,Person是一个类,p1是 Person类创建的一个实例。通过实例,我们可以使用 Person类中定义的属性和方法。例如,我们可以通过 p1.name 访问实例的 name 属性,并通过 p1.get_name() 调用实例的 get_name方法。

4、初始化方法

        在Python中,初始化方法是一个特殊的方法,用于创建类的实例并初始化实例的属性。初始化方法的名称为 __init__,并且第一个参数通常是 self,代表对当前对象的引用。通过初始化方法,可以在创建对象时设置对象的初始状态。

        在上面的代码中,__init__ 方法被用来初始化实例的 name 属性。在创建实例时,我们传递了 name  参数,并将它们存储在实例的属性中。

        需要注意的是,初始化方法是可选的。如果你没有定义初始化方法,Python会提供一个默认的初始化方法。但通常情况下,你需要自己定义初始化方法来完成对象的初始化工作。

        另外,除了 __init__ 方法外,还有其他一些特殊方法可以用来定制类的行为。这些特殊方法被称为“魔术方法”,例如 __str__ 方法用于定义对象的字符串表示形式,__eq__ 方法用于定义对象的相等性判断等。熟练掌握这些特殊方法可以让你更好地定制类的行为。

5、魔法方法

        在Python中,魔术方法(Magic Methods)是一种特殊的方法,用双下划线 __ 开头和结尾命名的方法。这些方法用于定制类的行为,例如实现对象的比较、转换、算术运算等功能。通过使用魔术方法,可以让类与Python的内置功能更好地集成。

        例如 __str__ 方法用于定义对象的字符串表示形式,__doc__获取类的文档注释。

class Person:
    """
    这里是Person的文档注释
    """

    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

    def __str__(self):
        return f"姓名:{self.name}"


p1 = Person("小白")
print(p1)
print(p1.__doc__)

6、字符串方法

        在Python中,类的 __str__() 方法是一种特殊的方法,用于返回对象的字符串表示形式。当打印一个对象或使用 str(obj) 函数时,Python会自动调用该对象的 __str__() 方法来获取其字符串表示。

        上面的示例中,Person 类定义了一个 __init__() 方法来初始化对象的属性,以及一个 __str__() 方法来返回对象的字符串表示。在 __str__() 方法中,我们使用了格式化字符串(f-string)来构建要返回的字符串。

        通过定义 __str__() 方法,我们可以控制对象的字符串表示,使其更有意义和可读性。这在调试和输出对象信息时非常有用。

7、self

        在Python中,self 是一个特殊的参数,用于表示对象实例本身。当你调用类的方法时,Python会自动将对象实例传递给方法的第一个参数,通常被命名为 self

        通过使用 self,可以在类的方法中访问对象的属性和其他方法。在上面的示例中,self 参数被用来访问对象实例的 name 属性。

        总之,self 是Python中用来表示对象实例自身的约定俗成的名称,通过它可以在类的方法中访问对象的属性和方法。

8、数据、属性、操作、行为

        在面向对象编程中,常常使用以下概念来描述类和对象的不同方面:

  1. 数据(Data):数据是类的属性(也称为实例变量),用于表示类的状态和特征。它们存储在对象中,并且每个对象都可以具有不同的数据值。例如,在一个人(Person)类中,年龄(age)和姓名(name)可以是该类的数据。

  2. 属性(Attribute):属性是类的数据和方法的统称。它们是类和对象的特征,并且可以通过点符号来访问。属性可以是类级别的,被所有对象共享,也可以是对象级别的,每个对象独立拥有自己的属性。

  3. 操作(Operation):操作是类的方法(也称为成员函数),用于执行特定的功能或操作。操作定义了类可以做什么以及如何与对象进行交互。例如,在一个人(Person)类中,say_hello() 可以是一个操作,用于打印出个人问候信息。

  4. 行为(Behavior):行为是对象对外部请求做出的响应。它描述了对象如何根据接收到的消息作出反应。行为由类的方法实现,使对象能够执行某些动作或操作。例如,在一个人(Person)类中,行走(walk)可以是一个行为,用于移动对象的位置。

        这些概念相互关联,共同构成了面向对象编程的基础。数据和属性描述了类和对象的特征,操作和行为描述了类和对象的行为和功能。通过将数据、属性、操作和行为组合在一起,可以创建具有丰富功能和交互能力的类和对象。

9、父类、基类、超类  or  子类、派生类

        在面向对象编程中,一个类可以继承自另一个类,被继承的类称为父类(Parent Class)、基类(Base Class)或超类(Superclass),而继承的类称为子类(Subclass)或派生类(Derived Class)。

class Person:
    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

    def __str__(self):
        return f"姓名:{self.name}"


class Student(Person):
    def __init__(self, name, age):
        Person.__init__(self, name)
        self.age = age

    def get_age(self):
        return self.age



s = Student("小白", 25)
# 子类可以调用自己的方法
print(s.get_age())
# 子类调用父类的方法
print(s.get_name())
print(s)

        在上述示例中,Person是父类,Student是子类。子类 Student继承了父类 Person的 __init__()get_name() 方法,并且还定义了自己的 get_age() 方法。

        通过继承,子类可以直接使用父类的属性和方法,并且还可以在子类中添加自己的特定行为。这样可以减少代码的重复,并且使得程序的设计更加灵活和可扩展。

10、多态

        python没有多态 python到处都是多态

        多态是面向对象编程中的一个重要概念,指的是同一操作作用于不同的对象,可以有不同的解释和实现,产生不同的执行结果。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。

        在多态中,子类可以将自己的实例化对象传递给父类的方法,从而实现对父类方法的重载或覆盖。当程序执行时,会根据实际传入的对象类型来决定调用哪个方法,从而实现不同的行为。

class Animal:
    def __init__(self, name):
        self.name = name

    def sound(self):
        print("Animal makes a sound")

class Dog(Animal):
    def sound(self):
        print("Dog barks")

class Cat(Animal):
    def sound(self):
        print("Cat meows")

# 创建Animal、Dog和Cat对象
animal = Animal("Animal")
dog = Dog("Dog")
cat = Cat("Cat")

# 调用各自的sound()方法
animal.sound()  # 输出:Animal makes a sound
dog.sound()  # 输出:Dog barks
cat.sound()  # 输出:Cat meows

11、重载多态  and  重写多态

        重载多态(Overloading Polymorphism)和重写多态(Overriding Polymorphism)都是多态性的体现,但它们实现多态性的方式不同。

        重载多态指的是在一个类中定义多个同名方法,但是这些方法的参数类型、个数或顺序不同,从而在调用该方法时根据传入的参数类型、个数或顺序来决定调用哪个方法。重载多态是通过编译期间静态绑定来实现的。

        重写多态指的是子类对父类方法的重写或覆盖,从而使得同样的方法调用对于不同的对象可以产生不同的行为。重写多态是通过运行期间动态绑定来实现的。

12、名称解释

  •         (1)实例属性:在Python中,实例属性是与类的实例相关联的属性,每个类的实例都可以具有不同的实例属性值。实例属性通常在类的构造方法(通常是__init__方法)中定义,并且它们通过self关键字与实例关联。
    •         (2)实例方法:在Python中,实例方法是与类的实例关联的方法,它们通过类的实例调用。实例方法的第一个参数通常是self,它代表调用该方法的实例本身。通过self,实例方法可以访问和操作实例的属性。
      •         (3)类属性:在Python中,类属性是与整个类关联的属性,而不是与类的实例关联。类属性是在类级别上定义的属性,它们在所有类的实例之间共享相同的值。类属性通常在类的顶层定义,而不在任何方法内。
        •         (4)类方法:在Python中,类方法是与类关联而不是与类的实例关联的方法。类方法使用@classmethod装饰器进行定义,并且其第一个参数通常是cls,表示类本身。类方法可以通过类调用,而不需要创建类的实例。
          •         (5)静态方法:在Python中,静态方法是与类关联的方法,但与实例无关。静态方法使用@staticmethod装饰器进行定义,与普通的函数类似,但位于类的命名空间中。静态方法既不需要表示实例的self参数,也不需要表示类的cls参数。
class Person:
    # 类属性
    info = "hello"

    # 类方法
    @classmethod
    def get_cls(cls):
        return cls.__name__

    # 静态方法
    @staticmethod
    def get_info():
        return Person.info

    # 初始化实例
    def __init__(self, name):
        self.name = name
    # 实例方法
    def get_name(self):
        return self.name

    def __str__(self):
        return f"姓名:{self.name}"


# p1是一个实例
p1 = Person("小白")
# 实例属性
print(p1.name)
# 通过实例调用实例方法
print(p1.get_name())
# 通过类名调用类属性
print(Person.info)
print(Person.get_cls())
print(Person.get_info())

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

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

相关文章

哪款洗地机好用?2024年洗地机推荐

家居清洁工作却是一项既重要又耗时的任务,尤其是地面的清扫工作,既要保证清洁,又要尽量减少对地板的磨损。吸拖一体的洗地机出现,让全职妈妈、忙碌的上班族以及健康状况欠佳的长者都能从繁重的家务活中解脱出来,享受自…

让MySQL和Redis数据保持一致的4种策略

1 前言 先阐明一下 MySQL 和 Redis 的关系:MySQL 是数据库,用来持久化数据,一定程度上保证数据的可靠性;Redis 是用来当缓存,用来提升数据访问的性能。 关于如何保证 MySQL 和 Redis 中的数据一致(即缓存…

[服务器]ESXi 8安装centos7

文章目录 创建虚拟机创建虚拟机选择centos7选择存储选择镜像文件上传ios镜像文件 安装即将完成 启动虚拟机自动获取ip设置root密码安装成功 创建虚拟机 创建虚拟机 选择centos7 选择存储 选择镜像文件 上传ios镜像文件 如图显示上传进度,上传完毕之后,将…

CleanMyMac X.4.14.6中文版新功能介绍,mac系统垃圾清理

近些年伴随着苹果生态的蓬勃发展,越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现,它的使用逻辑与Windows存在很多不同,而且随着使用时间的增加,一些奇奇怪怪的文件也会占据有限的磁盘空间,进而影响使用…

AIGC项目——Meta:根据对话音频生成带动作和手势的3d逼真数字人

From Audio to Photoreal Embodiment: Synthesizing Humans in Conversations From Audio to Photoreal Embodiment:Synthesizing Humans in Conversations 从二元对话的音频中,我们生成相应的逼真的面部、身体和手势。 概括性:角色是由作者的声音驱动的(而不是模…

flink cdc,standalone模式下,任务运行一段时间taskmanager挂掉

在使用flink cdc,配置任务运行,过了几天后,任务无故取消,超时,导致taskmanager挂掉,相关异常如下: 异常1: did not react to cancelling signal interrupting; it is stuck for 30 s…

(1)SpringBoot学习——芋道源码

Spring Boot 的快速入门 一.、概述 使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的基于 Spring 的应用。 二、快速入门 2.1 创建 Maven 项目 打开 IDEA,点击菜单 File -> New -> Project.来创建项目选择 Maven 类型,点击「…

Kotlin:用源码来深入理解 ‘StateFlow和SharedFlow的区别和联系‘

Kotlin:用源码来深入理解 ‘StateFlow和SharedFlow的区别和联系’ 在这篇文章中,我们将深入研究Kotlin中的StateFlow和SharedFlow,以及它们的相似之处和不同之处。我们将通过查看它们的源代码来理解它们的工作原理,这将帮助我们更…

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置

上一篇: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 目录 1. 🥙Idea中配置Live Templates来快速生成代码片段 2. 🥙Idea中配置文件模板自定义初始代码 3.🥙设置spark-submit提交程…

刨析数据结构(一)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构————"带你无脑刨析" 🏆🏆关注博主,随时获取更多关于数据结构的优质内容!🏆🏆 😀欢迎…

chromedriver安装和环境变量配置

chromedriver 1、安装2、【重点】环境变量配置(1)包的复制:(2)系统环境变量配置 3、验证 1、安装 网上随便搜一篇chromedriver的安装文档即可。这里是一个快速链接 特别提醒:截止2024.1.30,chr…

计算机网络_1.3电路交换、分组交换和报文交换

1.3电路交换、分组交换和报文交换 一、电路交换1、“电路交换”例子引入2、电路交换的三个阶段3、计算机之间的数据传送不适合采用电路交换 二、分组交换1、发送方(1)报文(2)分组(3)首部 2、交换节点3、接收…

酒店|酒店管理小程序|基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 (1)系统首页 &#xff0…

【fabrc.js】 创建组(fabric.Group)类型的 3 种方式

方法1:先选中已存在画布内多个图形,然后拿到ActiveSelection数据,随后调用 toGroup() 即可将选中的图形创建为组对象;方法2:new fabric.Group() 获取group实例,通过new的时候传入图形参数[o1,o2...]&#x…

【代码能力提升 | 代码阅读学习】分析 VoxelNet 的 主干

文章目录 前言代码分析VoxelNet model2.数据处理2.1单个样本处理2.2处理成batch 最后,附上我一步步调试代码,到3D-conv 前言 代码来自:https://github.com/skyhehe123/VoxelNet-pytorch 其中 测试数据来自:https://github.com/ga…

python爬虫之豆瓣首页图片爬取

网址:https://movie.douban.com/ import requests from lxml import etree import re url https://movie.douban.com headers {User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/5…

CGAL5.4.1 边塌陷算法

目录 1、使用曲面网格的示例 2、使用默认多面体的示例 3、使用丰富多面体的示例 主要对1、使用曲面网格的示例 进行深度研究 CGAL编译与安装CGAL安装到验证到深入_cgal测试代码-CSDN博客 参考资料CGAL 5.4.5 - Triangulated Surface Mesh Simplification: User Manual …

卡片式 UI 设计的 8 个秘诀,让你轻松打造高颜值界面

做卡片设计最重要的是什么?我将在这篇文章中分享 8 最关键的细节。在此之前,让我们一起来对付一下。 UI 梳理卡片设计的基础,总结哪些场景适合卡片设计。 卡片是 UI 其中一个组件元素可以创建一个清晰的视觉单元,使信息更具逻辑性…

expect 语言 Here Document 多行重定向

一、expect是什么 1.1 expect定义 是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题 1.2 怎么安装expect yum install -y expect 进行安装 二、怎么使用e…

力扣hot100 电话号码的字母组合 回溯

Problem: 17. 电话号码的字母组合 文章目录 思路复杂度💝 Code 思路 👨‍🏫 参考题解 复杂度 时间复杂度: O ( 3 8 ) O(3^8) O(38) 空间复杂度: O ( 3 8 ) O(3^8) O(38) 💝 Code class Solution {String[] map { "…