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

为什么在class方法中创建一个类的实例会改变'self‘参数呢?

在class方法中创建一个类的实例会改变'self'参数的原因是,class方法是定义在类中的函数,它的第一个参数通常被约定为'self',表示该方法所属的实例对象。

当在class方法中创建一个类的实例时,实际上是通过调用该类的构造函数来创建一个新的对象。在构造函数中,会将该对象作为第一个参数传递给'self',以便在方法内部可以访问和操作该对象的属性和方法。

因此,当在class方法中创建一个类的实例时,会改变'self'参数,使其指向新创建的实例对象。这样,在方法内部就可以通过'self'来引用和操作该实例对象的属性和方法。

举例来说,假设有一个名为Person的类,其中定义了一个class方法叫做create_instance。当调用该方法时,会创建一个新的Person实例,并将该实例赋值给'self'参数。这样,在create_instance方法内部就可以通过'self'来访问和操作该实例的属性和方法。

代码语言:txt
复制
class Person:
    def create_instance(self):
        self.name = "John"
        self.age = 25

person = Person()
person.create_instance()
print(person.name)  # 输出:John
print(person.age)  # 输出:25

在上述例子中,调用create_instance方法会创建一个新的Person实例,并将该实例赋值给'self'参数。在方法内部,通过'self'来设置该实例的name和age属性。最后,通过访问person对象的name和age属性,可以获取到相应的值。

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

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT Hub):https://cloud.tencent.com/product/iothub
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python教程第6章 | Python面向对象

只有声明了是方法,才能使用类属性 方法想要使用类属性,一个参数,需要写上 cls , cls 是 class 缩写,其实意思就是把这个作为参数,传给自己,这样就可以使用类属性了。...主要不同点有: 方法里面没有了 @classmethod 声明了,不用声明他是方法 方法里面的参数 cls 改为 self 使用,变成了先通过 实例名 = () 方式实例化对象,为创建一个实例...,然后再使用 实例名.函数() 方式调用对应方法 ,使用 实例名.变量名 方法调用属性 这里说明一下,方法参数为什么 cls 改为 self ?...相信为什么要这么做,这么证明。 还是那句话多想,多敲。 回归正题,从运行结果来看,方法改变了,实例方法也是跟着改变。 在这个例子,我们需要改变方法,就用到了重写。...内部方法中使用时 self.__private_attrs。 为什么只能说一般情况下? 因为实际上, Python 是没有提供私有属性等功能

19810
  • Python多继承、super与MRO算法

    可能有的同学会问,super第2个参数为什么self?我们都知道,Pythonself表示本身实例,那么为什么不是B()或是A()?...__init__(c) c = C(None) b = B(None) B(b) B(c) 这段代码创建B实例之前,先创建一个C实例以及一个传入NoneB实例。...而在B构造方法多了一个参数,用于传入这个外部实例,并将这个外部实例作为super构造方法第2个参数传入。...由于创建C和B实例时传入了None,所以super构造方法第2个参数值也是None。...其实Python编译器解析时,会将当前所有父(包括直接和间接父)按一定规则进行排序,然后会根据super构造方法一个参数值决定使用哪一个。那么这个顺序是怎样

    51010

    python基础六

    注意:我们导入模块时,现在本地文件查找该模块,再去系统变量查找也就是说如果我们将本地py文件命名修改成上篇文章任意一个,再去使用它就会报错。 如果我想要调用TestGetstr方法?...__dict__['name'] Person:名,可以自己定义 gamename:静态属性,不会改变 但是调用用名调用 __init__:当实例化Person 执行函数 #实例化就会输出:正在定义属性...self: self变量,可以看作包含所有属性字典 *args:参数 实例参数会在__init__接收 是抽象,他只负责定义一些属性和功能,经过实例化之后变成对象。...反过来 import 一个模块过程就是一个实例过程 另:是可以当作一个属性传入到另一个。 面向对象之封装,继承,多态 继承:#为什么继承?...python2.7遵守深度优先原则 多态: 一个方法表现不同形式: class A: def write(self): print('A') class B: def

    61030

    KVO详解(一)

    获取到创建self.person实例对象那个。...中间做了什么? 现在我们知道了,当一个实例对象被KVO观察之后,该对象isa指针会被改变,指向一个动态生成,这个新继承自原。 那么这个动态里面做了什么事情?...为什么NSKVONotifying_LVPerson继承自LVPerson,但是LVPerson有些方法NSKVONotifying_LVPerson却没有打印出来?...前面我不是有提到,要通过对象class方法来获取对象,而不是通过isa指针:通过isa指针有可能获取到中间,而通过class方法获取到,肯定是最初创建实例对象那个。...为什么通过class就能获取到最初那个?这里就解释了原因了,因为动态子类class方法进行了重写,它指向就是动态子类,即最初那个

    74431

    Python学习(七)---- 面向对象学习(

    这个实例 4 5dog1.bulk() # 调用内部方法 2.2 参数self 初始化一个实例,就需要调用这个一次: 1dog1 = Dog("wangcai") # 生成一个实例,自动把参数传给...) 依然没给self传值 ,但Python还是自动帮你把dog1 赋值给self这个参数为什么?...因为,你bulk(..)方法可能要访问dog1一些其它属性呀, 比如这里就访问了dog1名字,怎么访问?...比如存放用户信息,用户姓名等属性可以放在实例变量里,国籍都是中国,可以放在变量里。 但是,变量和方法方法不在实例,调用怎么调用?...而是实例里添加一个属性 6 7Dog.n ="ccc" #改变变量 2.5 析构函数、私有属性和私有方法 析构函数:跟构造函数相反。

    41020

    Python基础之:Python

    通过访问xi值,我们可以发现这个i值是和MyClass变量i值是一致实例化操作(“调用”对象)创建一个空对象。...如果你想在实例时候做一些自定义操作,那么可以定义一个 __init__() 方法时,实例化操作自动为新创建实例发起调用 __init__()。...虽然方法一个参数常常被命名为 self。 这也不过就是一个约定: self 这一名称 Python 绝对没有特殊含义。 方法对象特殊之处就在于实例对象作为函数一个参数被传入。...为什么方法对象不需要传入self这个参数?从 x.f输出我们可以看出,这个方法已经绑定到了一个实例对象,所以self参数会被自动传入。...复制代码 变量和实例变量 变量和实例变量使用,我们需要注意哪些问题

    78520

    Python基础之:Python

    通过访问xi值,我们可以发现这个i值是和MyClass变量i值是一致实例化操作(“调用”对象)创建一个空对象。...如果你想在实例时候做一些自定义操作,那么可以定义一个 __init__() 方法时,实例化操作自动为新创建实例发起调用 __init__()。...虽然方法一个参数常常被命名为 self。这也不过就是一个约定: self 这一名称 Python 绝对没有特殊含义。 方法对象特殊之处就在于实例对象作为函数一个参数被传入。...为什么方法对象不需要传入self这个参数?从 x.f输出我们可以看出,这个方法已经绑定到了一个实例对象,所以self参数会被自动传入。...变量和实例变量 变量和实例变量使用,我们需要注意哪些问题

    72520

    Python基础之:Python

    通过访问xi值,我们可以发现这个i值是和MyClass变量i值是一致实例化操作(“调用”对象)创建一个空对象。...如果你想在实例时候做一些自定义操作,那么可以定义一个 __init__() 方法时,实例化操作自动为新创建实例发起调用 __init__()。...虽然方法一个参数常常被命名为 self。 这也不过就是一个约定: self 这一名称 Python 绝对没有特殊含义。 方法对象特殊之处就在于实例对象作为函数一个参数被传入。...为什么方法对象不需要传入self这个参数?从 x.f输出我们可以看出,这个方法已经绑定到了一个实例对象,所以self参数会被自动传入。...变量和实例变量 变量和实例变量使用,我们需要注意哪些问题

    73950

    2022年最新Python大数据之Python基础【九】面向对象与继承

    添加:self.属性名 = 值 获取:self.属性名 一般实例属性写在实例方法,调用该方法才能获取实例属性,对象创建后,其中一个实例调用该方法,获取实例属性,其余对象不发生变化 # 实例属性内部添加或获取格式...# 如果我们能够将参数传递到init方法,是不是就可以创建对象时,动态添加属性值了? # 我们怎样给init进行传参?...# 实例化对象时,名(参数1, 参数2....)这些参数传递给init方法,进行使用 # class Person(object): # def __init__(self, name,...# Jack 18 # 结论: Person创建对象时,()内添加参数,可以被init接收但是,传参数量和inti方法形参必须一致 # 怎样实现动态实例属性添加?...,直接调用子类方法,不会调用父 重写时只要方法名称相等即可,不需要进行参数校对 为什么可以重写父方法,因为调用方法或者属性时,按照继承层级依次查找 # 定义一个Person class

    30210

    Python基础:Python(真累~

    s1_num:11   s2_num:22   Manage_num:22 """  问题:为什么修改num值以后,实例s1和实例s2会有不同结果 ?             ...self代表就是实例本身 修改实例属性,希望初始化参数放置init下面。(个人觉得,这个初始化参数可以是一切对象!)...__del__()   自定义方法:   除去自带以_下划线开头函数,定义一个函数,实现相应功能。...删除数据 p = Person()del p['name'] 自动运行delitem __new__ __new__是创建实例方法,并且阻止init运行,使用return 返回new创建实例值,...学名叫元!     也许有人问那为啥type()能查看到数据类型?     可能你注意到,type结果前是class。。。

    69820

    卧槽,好强大魔法,竟能让Python支持方法重载

    你真的了解方法重载吗? 方法重载是面向对象中一个非常重要概念,包含了成员方法和构造方法。...Python从头扫描所有的方法,遇到一个方法,就会将这个方法添加到维护字典。...我们采用方案是创建一个MultiMethod,用于保存同名方法所有实例,而key不变,仍然是方法名,只是value不再是方法对象,而是MultiMethod对象。...另外一个核心魔法方法是__call__,该方法调用对象方法时被调用,可以方法扫描调用时传入值参类型,然后将参数类型转换成元组,再到MultiMethod维护字典搜索具体方法实例,并在..._methods[tuple(types)] = meth # 当调用MyOverload某个方法时,执行__call__方法方法通过参数类型注解检测具体方法实例,然后调用并返回执行结果

    1.8K20

    您好,这里有一份 “实例”请您接收一下。

    写在之前 昨天写了类属性,作为不分家小伙伴,今天当然是来说说 “实例”。我之前文章说过,是对象定义,实例才是真实东西。...比如 “人” 是一个,但是 “人” 终究不是具体某个喘气,只有 “rocky” 才是具体东西,但他是具有 “人” 这个所定义属性和方法。“rocky” 就是 “人” 这个实例。...那么对于一个实例来说这个建立过程是怎么进行?...当我们创建实例,接下来就是调用,当被调用以后,先是创建一个实例对象,然后检查是否有 __init__(),如果有的话就调用这个方法,并且将实例对象作为第一个参数 self 传进去,如果没有的话,就只是返回实例对象...写这篇文章时候,查了一些资料,看到几个之前没有注意到点,我也文章给大家提醒了,知识就是这样,有很多你忽略东西,永远不要觉得基础不重要,也永远不要小看 “简单” 这个词。

    23900

    Python super()方法、多继承以及MRO顺序

    方法,对父参数,应该是由于pythonsuper算法导致原因,必须把参数全部传递,否则会报错 单继承时,使用super方法,则不能全部传递,只能传父方法所需参数,否则会报错 多继承时,相对于使用名...为什么改变了 Parent.x 值还会改变 Child2.x 值,但是同时 Child1.x 值却没有改变? 这个答案关键是, Python 变量在内部是作为字典处理。...如果一个变量名字没有在当前字典中发现,将搜索祖先(比如父)直到被引用变量名被找到(如果这个被引用变量名既没有自己所在又没有祖先中找到,引发一个 AttributeError 异常...因此,设置 x = 1 会使得变量 x 引用该类和其任何子类值为 1。这就是因为第一个 print 语句输出是 1 1 1。...最后,如果该值中被改变(例如,我们执行语句 Parent.x = 3),这个改变影响到任何未重写该值子类当中值(在这个示例中被影响子类是 Child2)。

    1.6K30

    python基础 面向对象编程

    面向对象编程基本思想   实例     用于定义抽象类型     实例根据定义创建出来 python 定义创建实例   python ,通过class 关键字定义,以Person 为例...定义Person 时,可以为Person 添加一个特殊 _init_()   创建实例时,_init_() 方法被自动调用,我们能再此为每个实例   都统一加以下属性:     class Person...python 类属性和实例属性名字冲突怎么办。     修改类属性导致所有实例访问到类属性全部收到影响,但是,     如果在实例变量上修改类属性发什么问题。     ...python 定义实例方法     实例方法就是定义函数,它一个参数永远     是self,指定调用该方法实体本身,其他参数一个普通     函数完全一样。     ...class 定义全部是实例方法实例方法一个参数 self     是实例本身。       class 定义方法,需要这么些。

    56540

    面向对象进阶

    将在内存创建一个对象,名字就是MyClass。这个对象(对象MyClass)拥有创建对象(实例对象)能力。...使用type创建带有方法 最终你希望为你增加方法。只需要定义一个有着恰当签名函数并将其作为属性赋值就可以了。...type就是Python背后用来创建所有。现在你想知道那为什么type全部采用小写形式而不是Type?...如果还是找不到__metaclass__,Python就会用内置type来创建这个对象。 现在问题就是,你可以__metaclass__中放置些什么代码?答案就是:可以创建一个东西。...那么什么可以用来创建一个?type,或者任何使用到type或者子类化type东东都可以。 8. 自定义元主要目的就是为了当创建时能够自动地改变

    32210

    Python通过对象不能调用方法和静态方法解析

    当我们使用Python编写程序时,可能遇到通过对象调用方法和静态方法失败问题,那么这是为什么?接下来,我们将从多个方面对这个问题进行详细解析。...方法和静态方法都是定义一种方法,可以通过名直接调用,而不需要先创建该类实例。...二、对象调用方法原理Python,对象调用方法原理可以简单概括为:Python通过找到方法所在,并将该对象作为第一个参数(通常用self)传入方法。...三、不能通过对象调用方法和静态方法原因既然Python对象调用方法原理是将该对象作为第一个参数传入方法,那么为什么不能通过对象调用方法和静态方法?...3.1 方法方法,第一个参数是cls而不是self,表示该类本身。因此,如果我们通过对象调用方法,那么实际上传入参数不是该类本身,而是该对象本身,这就会导致类型错误。

    77730

    KVO详解(二)

    然后分类中去增加一个自定义添加观察者方法方法,大致是做三件事情: 验证观察keyPath是否有对应setter方法,有的话才会进行下一步 创建一个中间 修改实例对象isa指针指向...class方法复写还好说,就是让其返回其父也就是最开始那个原即可。 setter方法如何复写?setter做了哪些事情?我们接下来就分析一下。...上面提到,我需要在对应属性值改变时候,向所有监听该改变观察者们去发送消息,以通知其对该改变作出响应。 所以现在就有这样一个问题,我如何找到这些观察者?...那我就会想到,既然这样,我NSObject+NormanKVO复写dealloc方法好了: ? 这样做是有问题为什么?...不知道大家还有没有印象,在上篇文章,我在打印系统KVO产生中间方法列表时候,是有4个方法,如下: ? 其中一个方法就是dealloc,这说明中间子类dealloc也被覆写了。

    68931
    领券