首页
学习
活动
专区
工具
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 是没有提供私有属性等功能

18310

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构造方法一个参数值决定使用哪一个。那么这个顺序是怎样

49510

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

59630

KVO详解(一)

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

71831

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

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

39520

Python基础之:Python

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

77020

Python基础之:Python

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

71620

Python基础之:Python

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

72950

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

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

28810

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。。。

68320

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

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

23300

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

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

1.8K20

python基础 面向对象编程

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

55240

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.5K30

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

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

63830

面向对象进阶

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

30910

python高级编程: 以及自省机制

广度优先 查找顺序是A->B->C->D->E, 由于优先级关系, B和D优先级高于C, 但是如果C和D定义了同一个方法, 由于广度优先所以将会使用C方法, 这是不合理 ?...可通过实例对象或对象调用 方法 @classmethod 方法只能访问变量,不能访问实例变量 可通过实例对象或对象调用 需要传入cls参数, cls参数指向是一开始定义对象(不是实例对象...) 对比 方法无须创建实例对象调用,所以方法调用较实例方法更为灵活 静态方法有点像附属于对象“工具”, 将对象相关处理逻辑“束缚”在对象体内,这样封装得更好些。...实例方法使用最多,可以直接处理实例对象逻辑;方法不需要创建实例对象,直接处理对象逻辑;静态方法将与对象相关某些逻辑抽离出来,不仅可以用于测试,还能便于代码后期维护。...实例方法方法,能够改变实例对象或对象状态,而静态方法不能。

36120
领券