首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类中的self对象有两个版本,怎么会这样呢?

在Python中,类中的self对象有两个版本是因为Python中的类方法和实例方法的存在。

  1. 实例方法:实例方法是最常见的类方法,它的第一个参数通常被命名为self,表示对当前实例对象的引用。通过self可以访问实例的属性和方法。实例方法只能通过实例对象来调用。
  2. 类方法:类方法使用@classmethod装饰器进行修饰,第一个参数通常被命名为cls,表示对当前类的引用。类方法可以通过类名或实例对象来调用。类方法可以访问类的属性和方法,但不能访问实例的属性和方法。

这两个版本的self对象的存在是为了满足不同的需求。实例方法主要用于操作实例对象的属性和方法,而类方法主要用于操作类的属性和方法。通过这两个版本的self对象,可以方便地在类中进行属性和方法的访问和操作。

举例来说,假设有一个名为Person的类,其中有一个实例方法和一个类方法:

代码语言:txt
复制
class Person:
    def __init__(self, name):
        self.name = name
    
    def say_hello(self):
        print("Hello, my name is", self.name)
    
    @classmethod
    def get_class_name(cls):
        print("Class name is", cls.__name__)

在这个例子中,实例方法say_hello可以通过实例对象来调用,例如:

代码语言:txt
复制
p = Person("Alice")
p.say_hello()  # 输出:Hello, my name is Alice

而类方法get_class_name可以通过类名或实例对象来调用,例如:

代码语言:txt
复制
Person.get_class_name()  # 输出:Class name is Person

p.get_class_name()  # 输出:Class name is Person

需要注意的是,实例方法的第一个参数是self,表示对当前实例对象的引用;而类方法的第一个参数是cls,表示对当前类的引用。这两个参数名可以根据需要进行修改,但通常约定俗成的命名方式是self和cls。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品:https://cloud.tencent.com/product
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
相关搜索:self和not self对象有什么区别,尤其是在Tkinter类中?模型类中的虚拟属性怎么会违反持久性忽略原则呢?如何更新子线程中的父类对象(self.progress)?在Apple中是否有像Apple的UIWebView这样的类?为什么同一个类有两个不同的实例呢?为什么在class方法中创建一个类的实例会改变'self‘参数呢?在一个有两个对象的数组中,我怎么能在(1)中得到越界异常呢?如何在Java中修改两个类中的对象?PHP对象的属性可以是数组吗?如果是这样的话,我该如何从对象中添加呢?哪个对象占用更多的空间:一个对象有两个键还是两个变量值?哪种更好些呢?在tidyverse中,"tbl“类的对象和"tbl_df”类的对象有什么区别?如果Self是swift中的两个(或更多)类之一,是否允许使用协议?Perl中的对象和类之间有什么区别?如果一个对象中已经有两个参数,为什么函数还需要两个参数呢?找出c ++中两个对象类之间的继承关系play商店中的Android应用程序有两个版本,分别是旧版本和新版本在一个图中,两个顶点之间的最短路径怎么会比图的最小生成树中这两个顶点之间的路径长呢?包中的类如何使用对象类型的另一个版本?在Python3中线程模块有变化吗?如果是这样,又是如何做到的呢?为什么Python类初始化变量不能用于包导入中的类实例对象,而可以呢?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript什么问题

表面上,当前版本显示OOP范例,因为: 我们可以创建基本定义,用非常经典语法将状态和行为分组在一起。 我们可以从一个继承到另一个。...因为尽管在表面上,它们看起来是非常面向对象,但是如果我们试图做一些超出它们可能事情,比如定义一个扩展两个(目前不可能事情),我们需要使用下面的代码 // 辅助函数 function applyMixins...换句话说,重复该名称,但要确保其接收不同参数。 现在我们了JSrest参数,这使我们可以拥有一个任意数字,但是,这也意味着我们必须在方法添加额外代码来处理这种动态性。...相反,我们可以更清楚地区分方法签名,则可以将相同行为不同含义直接封装到不同方法。 左边版本不是有效JS,但它提供了一个更干净代码,因此,阅读和理解起来比较容易。...右边版本是完全有效,它阅读起来相对困难些,还要懂得一些 ES6 语法。 多态性通常是通过查看方法接收到参数类型来实现。 但是,由于JS工作原理,我们知道这是不可能

1.4K10
  • 我是这样学会了Python对象知识,网上没有看到这种见解

    因此我决定写几篇 Python 数据处理分析必备入门知识系列文章,以帮助需要小伙伴们更好入门。 ---- 前言 关于 Python 对象相关知识,网络上已经非常多教程。...s1 得到对应实例) 方法dict` 可以获得对象数据字典 现在,示例还缺了函数 show_me ,同样是在 "学生" 定义: 行8-9:注意函数参数 self 行9:此时通过 self.name...对比一下"字典实现"方式定义: 上方为自定义函数,下方是"字典实现" 函数 注意其中 self 参数 与之对应参数 st "字典实现"方式,我们已经了解到,之所以需要参数 st ,...同理,学生定义 show_me 函数第一个参数 self ,实际就是调用时,要传入实例本身。...如果你查看某些学生信息字典时,会发现并不是这样子: 其实这想法已经很接近答案,因为这个函数不需要在每个学生信息字典中保存,只需要在信息字典中保存一份就可以: 实际上 自定义 St ,也是一个对象

    79620

    浅析python也是对象动态地创建用type创建metaclass属性元到底什么用

    也是对象 在python,一切皆是对象,就连生成对象,自身也是一个对象。既然也是一个对象,那么也可以被作为参数传递,也可以赋值给其他变量.......Dog 用type创建 type可以查看一个对象类型 In [21]: type(1) Out[21]: int In [22]: type('hello') Out[22]:...当程序在执行以下代码时,流程是这样: class Cat(Animal): pass Cat若有metaclass属性,就通过metaclass创建一个名为Cat 如果在Cat没找到metaclass...print(hasattr(Foo, 'bar')) # False print(hasattr(Foo, 'BAR')) # True f = Foo() print(f.BAR) # bip 元到底什么用...以上只是关于元一些粗浅认知,元作用主要是: 拦截创建 修改 返回修改之后在日常开发中极少会用到,属于深度魔法。

    2.3K30

    CSS两个选择器写一起作用,可分逗号和没有

    CSS两个选择器写在一起一、CSS层叠样式表设计当中,两个选择器写在一起,那么如果这两个选择器之间没有使用英文“,”隔开,而是使用空格,那么一般表示是选择第一个选择器子元素名为第二个选择器所有元素...,即这两个选择器一般是父、子元素(或后代元素)递进关系,目的是为了更精确地选择到HTML元素,比如.A .B就可以选择AB元素,而不是所有的B元素(A元素之外可能还有B元素)。...二、如果这两个选择器之间英文“,”隔开,那么这两个元素是被同时选择,比如.A, .B就是同时选择A元素和B元素,并可以同时这两个元素设置相同CSS样式。...CSS两个选择器写在一起实例代码,及在线编辑器下方实例,运行之后,可以将两个选择器空格改成英文“,”,然后再运行看看二者效果上区别:这是段落p,不包含子元素...,可分逗号和没有免责声明:内容仅供参考。

    31720

    面向对象编程(一)

    而面向对象编程几个基本特性:封装,继承,多态。 2、对象 前言中提到了面向对象编程是通过对象来组织代码,那么肯定要先来了解下这两个最重要概念,对象。...比如根据Animal创建对象cat,dog等。 2.1、定义 要定义一个,使用关键字class,后跟名称。通常包含属性(变量)和方法(函数)。...此后通过该类创建对象,都必须强制传入这两个属性。定义__init__方法是该类构造方法,也就是构造该实例时候需要传入name和foot两个属性共同创建该对象。...3、封装 前面介绍了对象后,继续来介绍面向对象几大特性。首先就是封装。封装是一种将数据和操作封装在机制,通过定义公共接口,隐藏内部实现细节。...比如上面定义Animal一个call()方法,表示动物叫声。 Python中继承语法为:class 子类(继承)。

    12110

    学习underscore源码整体架构,打造属于自己函数式编程

    也就是说最后得到实例对象这样结构 {_wrapped:'参数obj',}它原型 _(obj)....于是赶紧在 github搜索这句加上 ""双引号。表示全部搜索。 搜索到两个在官方库 ISSUE,大概意思就是兼容IE低版本写法。兴趣可以点击去看看。..._(obj).chain() : obj; }; 细心读者会发现 chainResult函数 _(obj).chain(),是怎么实现实现链式调用。...而 _(obj)是返回实例对象 {_wrapped:obj}呀。怎么会有 chain()方法,肯定有地方挂载了这个方法到 _.prototype上或者其他操作,这就是 _.mixin()。...记得之前 React mixin功能, Vue也有 mixin功能。但版本迭代更新后基本都是慢慢都不推荐或者不支持 mixin。

    50520

    miniguimgncs 1.2.0:解决miniStudio生成渲染器(renderer)设置文本颜色无效问题

    如下,我只是想做一个黑底白字效果,所以用渲染器指定了字体颜色为白色,背景为黑色。 ? ? 然而,程序实际运行时候却是这样,说好白色? ? 遇到这个问题我瞬间就懵了,前几天还好好呀。...怎么会这样?退回来仔细想想,前几天我用是apt-get安装minigui官方二进制包,而最近我使用是自己编译libminigui-3.2.0/,libmgncs-1.2.0库。...可能是官方libmgncs-1.2.0二进制包版本与发布libmgncs-1.2.0源码并不同步,接下来只能从源码找原因喽。...mLabelPiece(libmgncs-1.2.0/src/pieces/mlabelpiece.c)paint函数刷新屏幕时,在从渲染器对象读取前景色时使用ID是NCS_FGC_WINDOW(0x7001...修改位置详见下面的代码片段中文注释 static void mLabelPiece_paint(mLabelPiece *self, HDC hdc, mWidget *owner, DWORD add_data

    71110

    python 面向对象

    世界万物,皆可分类,皆为对象。 只要是对象,就肯定属于某种品类,属性。 在Python,所有数据类型都可以视为对象,当然也可以自定义对象。...自定义对象数据类型就是面向对象(Class)概念。...在定义了这些对象都具备属性(variables(data))、共同方法 Object 对象  一个对象即是一个实例化后实例,一个必须经过实例化后方可在程序调用,一个可以实例化多个对象...,每个对象亦可以不同属性,就像人类是指所有人,每个人是指具体对象,人与人之前有共性,亦有不同 Encapsulation 封装 在对数据赋值、内部调用对外部用户是透明,这使变成了一个胶囊或容器...你拉着我说你有些犹豫,怎么会这样子?

    58720

    自学Python十二 战斗吧Scrapy!

    不过我可以引用官方文档的话来回答你:Scrapy为start_urls属性每个url都创建了一个Request对象,并将parse方法最为回调函数(callback)赋值给了Request。...我们既然知道了返回是response,我们可以试着将里面我们需要东西匹配读取保存下来,比如文字,比如图片。在Scrapy他拥有自己Selectors。使用了一种基于XPath和css机制。...ScrapyBaseSpider爬虫类只能抓取start_urls中提供链接,而利用Scrapy提供crawlSpider可以很方便自动解析网页上符合要求链接,从而达到爬虫自动抓取功能。...items.py 和 pipeline.py咋没用上。那就来谈谈这两个: Items   爬取主要目标就是从非结构性数据源提取结构性数据,例如网页。...Scrapy提供 Item来满足这样需求。Item 对象是种简单容器,保存了爬取到得数据。 其提供了 类似于词典(dictionary-like) API以及用于声明可用字段简单语法。

    65530

    Appium+python自动化(十二)- Android UIAutomator终极定位凶器(超详解)

    Android团队在4.1版本(API 16)推出了一款全新UI自动化测试工具UiAutomator,用来帮助开发人员更有效率完成AppDebug工作,同时对于测试人员也是一大福音,为什么这么说...还有这样问题,麻烦你复现给我看看。(内心独白:吹牛逼,我这么牛逼,我写App怎么会可能有bug,一定是你用姿势不对)” QA:一段忙碌神操作之后...“咦,怎么不出现了?...库去查找元素,都直接用官方公布出来方法去找了还能找不到吗?   ...,这样是不是感觉更高大上?...,所以在学习appium同时把uiautomator去大概学习一下这个很有帮助,并且对以后提升自己以及工作重新封装appium很大帮助。

    2K51

    Python - 面向对象学习

    定义了这些对象都具备属性(variables(data))、共同方法 Object 对象 一个对象即是一个实例化后实例,一个必须经过实例化后方可在程序调用,一个可以实例化多个对象...,每个对象亦可以不同属性,就像人类是指所有人,每个人是指具体对象,人与人之前有共性,亦有不同 Encapsulation 封装 在对数据赋值、内部调用对外部用户是透明,这使变成了一个胶囊或容器...你拉着我说你有些犹豫,怎么会这样子?...刚才定义这个体现了面向对象第一个基本特性,封装,其实就是使用构造方法将内容封装到某个具体对象,然后通过对象直接或者self间接获取被封装内容 面向对象特性: 封装 封装最好理解了。...实现继承是指使用基属性和方法而无需额外编码能力;          接口继承是指仅使用属性和方法名称、但是子类必须提供实现能力(子类重构爹方法); 在考虑使用继承时,一点需要注意,那就是两个之间关系应该是

    39620

    python 面向对象之静态方法

    通过@staticmethod装饰器即可把其装饰方法变为一个静态方法,什么是静态方法?...其实不难理解,普通方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或变量,但静态方法是不可以访问实例变量或变量,一个不能访问实例变量和变量方法,其实相当于跟本身已经没什么关系了...positional argument: 'food' 意思是eat()方法缺少1个位置参数:'food' 怎么会?...d.eat(d) 执行输出: 二哈 is eating 但是这样做,把它变成静态方法,就没有意义了 静态方法,相当于一个工具包,它和其他没有任何关联。...静态方法不一定放到最下面,它可以放到任意位置。 总结: 静态方法只是名义上归类管理,实际上在静态方法里访问不了或实例任何属性。

    50420

    面向对象学习

    定义了这些对象都具备属性(variables(data))、共同方法 Object 对象 一个对象即是一个实例化后实例,一个必须经过实例化后方可在程序调用,一个可以实例化多个对象...,每个对象亦可以不同属性,就像人类是指所有人,每个人是指具体对象,人与人之前有共性,亦有不同 Encapsulation 封装 在对数据赋值、内部调用对外部用户是透明,这使变成了一个胶囊或容器...你拉着我说你有些犹豫,怎么会这样子?...刚才定义这个体现了面向对象第一个基本特性,封装,其实就是使用构造方法将内容封装到某个具体对象,然后通过对象直接或者self间接获取被封装内容 面向对象特性: 封装 封装最好理解了。...继承 面向对象编程 (OOP) 语言一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有所有功能,并在无需重新编写原来情况下对这些功能进行扩展。

    33710

    深入探讨 Python import 机制:实现远程导入模块

    部分也可能处于 zip 文件、网络上,或者 Python 在导入期间可以搜索其他地方。命名空间包并不一定会直接对应到文件系统对象;它们可能是无实体表示虚拟模块。...而后来版本( Python2.6 之后),都以绝对导入为默认使用导入方式。 使用绝对路径和相对路径各有利弊: 当你在开发维护自己项目时,应当使用相对路径导入,这样可以避免硬编码带来麻烦。...但有时候我不想使用全部插件,只想使用 plugin02、plugin04 ,那我就在配置文件写我要使用两个插件。...你只要: 定义一个实现了 load_module 方法 对与导入有关属性(点击查看详情)进行校验 创建模块对象并绑定所有与导入相关属性变量到该模块上 将此模块保存到 sys.modules (...在 SourceLoader 这个抽象里,几个很重要方法,在你写实现加载器时候需要注意 get_code:获取源代码,可以根据自己场景实现实现。

    64130

    深入探讨 Python import 机制:实现远程导入模块

    部分也可能处于 zip 文件、网络上,或者 Python 在导入期间可以搜索其他地方。命名空间包并不一定会直接对应到文件系统对象;它们可能是无实体表示虚拟模块。...而后来版本( Python2.6 之后),都以绝对导入为默认使用导入方式。 使用绝对路径和相对路径各有利弊: 当你在开发维护自己项目时,应当使用相对路径导入,这样可以避免硬编码带来麻烦。...但有时候我不想使用全部插件,只想使用 plugin02、plugin04 ,那我就在配置文件写我要使用两个插件。...你只要: 定义一个实现了 load_module 方法 对与导入有关属性(点击查看详情)进行校验 创建模块对象并绑定所有与导入相关属性变量到该模块上 将此模块保存到 sys.modules (...在 SourceLoader 这个抽象里,几个很重要方法,在你写实现加载器时候需要注意 get_code:获取源代码,可以根据自己场景实现实现。

    1K10

    说说 Python 装饰器「参数」那些事儿。

    ('NO elem in stack') return self.item.pop() 接下来我们来使用一下上述定义 Stack ,在用过程我发现了一件很奇怪事,当我向下面这样调用时候程序是正常...=1) 你可能会生成“这怎么会出错”疑问,因为按照我们理解,「关键字参数」会根据名字进行匹配,而「位置参数」会根据参数所在顺序进行匹配,既然这样的话,admin 明明是穿进了 username 变量...,那为啥会出错?...其实上面我们怀疑原因都没有问题,问题是我们装饰器写问题。问题就是出现在装饰器参数传递上。...那么新问题来了,作为用户来讲,无论使用位置参数或者是关键字参数都是对,这个我们是无法去控制,那这个问题应该怎么解决?Python 说:“用 inspect 模块”。

    47920

    面向对象:继承

    python3x版本只有一种: python3使⽤都是新式. 如果基谁都不继承. 那这个会默认继承 object 三,单继承。...那孙悟空继承了这两个. 孙悟空⾃然就可以执⾏这两个⽅法. 多继承⽤起来简单. 也很好理解. 但是多继承, 存在着这样⼀个问题. 当两个中出现了重名⽅法时候. 这时该怎么办?...因为在不同python版本中使⽤是不同算法来完成MRO. 这里需要补充一下python种类(继承需要): 在python2x版本存在两种类.:   ⼀个叫经典....继承关系图已经了. 那如何进⾏查找? 记住⼀个原则. 在经典采⽤是深度优先,遍历⽅案. 什么是深度优先. 就是⼀条路走到头. 然后再回来. 继续找下⼀个. ?...那这样顺序就叫深度优先遍历. ⽽如果是142356? 这种被称为⼴度优先遍历. 好了. 深度优先就说这么多. 那么上⾯那个图怎么找? MRO是什么? 很简单. 记住. 从头开始.

    57230
    领券