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

news2025/2/22 1:22:14

目录

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())

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

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

相关文章

由《幻兽帕鲁》私服漏洞引发的攻击面思考

《幻兽帕鲁》私服意外丢档 当了一天的帕鲁,回家开机抓帕鲁的时候发现服务器无法连接。运维工具看了下系统负载发现 CPU 已经跑满。 故障排查 登录服务器进行排查发现存在可疑的 docker 进程。 经过一番艰苦的溯源,终于在命令行历史中发现了端倪 攻击…

深入浅出AI落地应用分析:AI个人助手Monica

前言:铺天盖地的大模型以及所谓的应用到目前为止实际还是很少有像Monica这样贴合个人工作习惯的产品落地,比如像Chatgpt等这样的产品,绝大多数人不会专门买🪜翻墙出去用,而且大多数场景下素人或小白都不知道该怎么用,但是Monica这款产品就很好的以浏览器的插件的形式始终…

[BUUCTF]-PWN:cmcc_pwnme2解析

保护 ida 完整exp: from pwn import* context(log_leveldebug) #premote(node5.buuoj.cn,26964) pprocess(./pwnme2) addhome0x8048644 addflag0x8048682 getfile0x80485CB main0x80486F8 pop_ebp0x8048680 ret0x80483f2 pop_ebx0x8048409 pop_edi_ebp0x804867f st…

贪吃蛇---C语言---详解

引言 C语言已经学了不短的时间的,这期间已经开始C和Python的学习,想给我的C语言收个尾,想起了小时候见过别人的老人机上的贪吃蛇游戏,自己父母的手机又没有这个游戏,当时成为了我的一大遗憾,这两天发现C语…

Unity | 资源热更(YooAsset AB)

目录 一、AssetBundle 1. 插件AssetBundle Browser 打AB包 (1)Unity(我用的版本是2020.3.8)导入AssetBundle Browser (2)设置Prefab (3)AssetBundleBrowser面板 2. 代码打AB包…

算法:积木游戏学习数学

一、算法描述 小华和小微一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小微找到这排积木中数字相同且所处位置最远的2块积木块,计算他们的…

【LeetCode】每日一题 2024_1_30 使循环数组所有元素相等的最少秒数(哈希、贪心、扩散)

文章目录 LeetCode?启动!!!题目:使循环数组所有元素相等的最少秒数题目描述代码与解题思路 LeetCode?启动!!! 今天的题目类型差不多是第一次见到,原来题目描述…

【大数据】Flink 架构(四):状态管理

《Flink 架构》系列(已完结),共包含以下 6 篇文章: Flink 架构(一):系统架构Flink 架构(二):数据传输Flink 架构(三):事件…

GPIO中断

1.EXTI简介 EXTI是External Interrupt的缩写,指外部中断。在嵌入式系统中,外部中断是一种用于处理外部事件的机制。当外部事件发生时(比如按下按钮、传感器信号变化等),外部中断可以立即打断正在执行的程序&#xff0…

异常——浅析

异常 本人不才,对于异常只能做基本的介绍,无法给出自己的体会以及无法指明易错点 C异常 c语言处理异常的方式有 assert——直接中断程序 返回错误码——需要查找错误码表确定错误 这两种操作都不是很好,如果一个大型程序,为了找…

UE5动画源码剖析

重点剖析的类: UAnimationInstanceFAnimInstanceProxy 参考:https://zhuanlan.zhihu.com/p/405437842 参考:https://blog.csdn.net/qq_23030843/article/details/109103433 参考:https://ikrima.dev/ue4guide/gameplay-programm…

Opencv——霍夫变换

霍夫直线变换 霍夫直线变换(Hough Line Transform)用来做直线检测 为了加升大家对霍夫直线的理解,我在左图左上角大了一个点,然后在右图中绘制出来经过这点可能的所有直线 绘制经过某点的所有直线的示例代码如下,这个代码可以直接拷贝运行 import cv2 as cv import matplot…

自建DNS劫持服务器,纯内网劫持PS5,屏蔽更新,自动hen

背景:目前PS5首次折腾必须要连外网,还要改DNS,除非使用ESP8266/32, 本文的方法是完全不改DNS,不使用ESP8266,不连接外网的情况下自动折腾 能实现什么: 1.折腾全程不连接外网 2.完全自建hen服务器&#xff…

Vue(十九):ElementUI 扩展实现树形结构表格组件的勾父选子、半勾选、过滤出半勾选节点功能

效果 原理分析 从后端获取数据后,判断当前节点是否勾选,从而判断是否勾选子节点勾选当前节点时,子节点均勾选全勾选与半勾选与不勾选的样式处理全勾选和全取消勾选的逻辑筛选出半勾选的节点定义变量 import {computed, nextTick, reactive, ref} from vue; import {tree} f…

我该坚持纯正原创?还是随波逐流做搬运作者?

本文可能不是一个热点文章,甚至可能不是一个网创者该关心的文章,但是阿阳真心希望,大家可以静下心来看看。 阿阳在网赚领域混了差不多十年,这么多年也经历不少。我不想吹嘘什么,可能是因为年纪大了,觉得低调…

毕业设计----Ajax请求遇到的问题Uncaught TypeError: Cannot read properties of undefi

目录 问题 问题 总的来说,就是我在form表单新增了一个字段,在表单的验证规则中添加了一个名为 code 的自定义验证规则,但是没有提供该规则的实现代码,validate.js提示报错。 所以为了使验证规则生效,添加自定义验证方…

BODIPY FL NHS,BODIPY FL NHS 活化酯,可以实现对特定生物分子的可视化追踪和定位

您好,欢迎来到新研之家 文章关键词:BODIPY FL NHS ester,BODIPY FL NHS,BODIPY FL NHS 活化酯 一、基本信息 产品简介:BODIPY FL NHS ester, by combining BODIPY with NHS ester, this reagent is able to react w…

【CSS】常见

一. 溢出隐藏 1.1 单行文本溢出 .content{max-width:200px; /* 定义容器最大宽度 */overflow:hidden; /* 隐藏溢出的内容 */text-overflow:ellipsis; /* 溢出部分...表示 */white-space: nowrap; /* 确保文本在一行内显示 */ }问题:display:flex 和 ellipsis 冲…

Java学习之基础语法

Java学习之基础语法 本文主要是对于有了其他语言基础的人总结的资料,因此本文只写出了Java与C语言,C等语言的区别之处与部分重点。 1.基础语法: 1.1.包与类: 1.1.1.包: 在Java中,包(packag…

Asp.net移除Server, X-Powered-By, 和X-AspNet-Version头

移除X-AspNet-Version很简单,只需要在Web.config中增加这个配置节: <httpRuntime enableVersionHeader"false" />移除Server在Global.asax文件总增加&#xff1a; //隐藏IIS版本 protected void Application_PreSendRequestHeaders() {HttpContext.Current.Res…