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

如果我没有在类中的变量前使用self会发生什么?

如果在类中的变量前没有使用self,将无法正确地访问和操作该变量。在Python中,self是一个特殊的参数,用于引用当前对象实例。通过使用self,我们可以在类的方法中访问和操作对象的属性和方法。

如果没有使用self,那么变量将被视为局部变量,而不是类的属性。这意味着该变量只能在当前方法中使用,无法在其他方法中访问或共享。此外,如果在其他方法中尝试访问该变量,将会引发NameError异常。

以下是一个示例,说明在类中使用self和不使用self的区别:

代码语言:txt
复制
class MyClass:
    def __init__(self, value):
        self.value = value

    def print_value(self):
        print(self.value)

    def set_value(self, new_value):
        value = new_value  # 没有使用self,创建了一个局部变量
        print("New value set:", value)

my_object = MyClass(10)
my_object.print_value()  # 输出:10

my_object.set_value(20)  # 输出:New value set: 20
my_object.print_value()  # 输出:10,因为set_value方法中的value是局部变量,并没有修改类的属性

在上述示例中,如果在set_value方法中使用self.value = new_value而不是value = new_value,那么print_value方法将输出修改后的值20。

总结起来,如果没有在类中的变量前使用self,将无法正确地访问和操作该变量,也无法在不同的方法之间共享数据。因此,在类中使用self是非常重要的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

在其引用地址位置添加了对应实例属性 # 内部使用self,其实也代表该应用地址,也是在其应用地址位置添加了对饮实例属性 # 为什么内部要使用self 而不使用对象名?...简便,灵活.复用性高 # 1.我们每次使用对象不一致,如果使用对象名,需要每次都传入不同对象名,或者每个对象定义一个方法,这样不利于代码复用. # 2.某些时刻,我们没有将对象赋值给变量时候...没有提示 # 如果已经被释放了还继续使用,是不是会报错? 会报错 # 么你怎样去进行提示?...Son('xiaoming', 12) # s1 继承了父属性和方法,Son我们没有书写任何内容,但是可以调用父及其父方法 # s1.sing() # 调用方法时如果书写了...,直接调用子类方法,不会调用父 重写时只要方法名称相等即可,不需要进行参数校对 为什么可以重写父方法,因为调用方法或者属性时,按照继承层级依次查找 # 定义一个Person class

29110

iOS基础理论(三)

“消息传递”过程,objc_msgSend动作比较清晰:首先在 Class 缓存查找 IMP (没缓存则初始化缓存),如果没找到,则向父 Class 查找。...三、能否向编译后得到增加实例变量?能否向运行时创建添加实例变量?为什么?...不能向编译后得到增加实例变量; 能向运行时创建添加实例变量; 解释下: 因为编译后已经注册 runtime 结构体objc_ivar_list实例变量链表 和instance_size...13.使用block时什么情况会发生引用循环,如何解决? 一个对象强引用了block,block又强引用了该对象,就会发射循环引用。...如果可以手动实现这些调用,就可以实现“手动触发”了。 那么“手动触发”使用场景是什么?一般我们只希望能控制“回调调用时机”时才会这么做。

53130

终于把Python中下划线含义弄清楚了(憋了很久了)

如果想知道“ Python变量和方法名称下划线和下划线分别是什么意思?”,将尽力在这里为大家找到答案。..._bar = 23 如果你实例化这个并试图访问它构造函数定义foo和_bar属性,会发生什么?让我们来看看: >>> t = Test() >>> t.foo 11 >>> t...._bar 23 看到_bar一个下划线并没有阻止我们“进入”并访问该变量值。 这是因为Python单个下划线前缀仅仅是一种约定 但是,前导下划线确实影响名称从模块导入方式。...当在该列表搜索_baz时,将看到没有具有该名称变量。 那么,到底发生什么呢? 如果仔细查看,就会看到这个对象上有一个名为_testbaz属性。这是Python解释器应用命名混乱。...由于名称混乱,能够test()方法引用_mangledglobalmangled全局变量,就像在test()方法引用那样。

10.1K21

深入理解 weak-strong dance

多线程情况下,可能weakSelf指向对象会在 Block 执行前被废弃,这在上例无伤大雅,只会输出Self is nil,但在有些情况下(譬如在 Block 中有移除 KVO 观察者逻辑,执行到该逻辑...不知道大家怎么想,反正刚听说这个东西时候,是有几个疑惑self指向对象已经被废弃情况下,_handler成员变量也不存在了, ARC 下自动释放它指向 Block 对象,这个时候...Block 对象应该已经没有变量所持有了,它引用计数应该已经为0了,它应该被废弃了啊,为什么它还能继续存在并执行。...离职前不久公司做过一个关于函数式编程内部分享,讲完 PPT 后有个同学问我“闭包”是怎么实现当时没有细说,因为不同语言实现同一个概念时肯定会有一些差异,也不是什么语言都精通,所以不敢妄议...额外好处 上文说了每使用一次_weak变量就会把对象注册到 autoreleasepool ,所以如果短时间内大量使用_weak变量的话,导致注册到 autoreleasepool 对象大量增加

1.9K40

《Motion Design for iOS》(三十二)

UIButton有一个便利方式来构建一个按钮:+buttonWithType:方法。将按钮类型设为UIButtonTypeCustom,意味着没有默认风格会被设置,完全取决于我。...这是一种实用简单图标按钮,没有边界和其他怪异风格需要移除。有点类似于CSS对按钮进行重置。 接下来设置按钮图片为app包“map-icon”图片。...我们可以检查我们界面元素并查看它们位置来决定我们应该做什么,但那太麻烦了,所以让我们通过一个简单作为@property BOOL 变量来跟踪状态。...在这个文件顶部添加了一个名为mapShowingBOOL变量来管理我们是需要打开还是关闭地图视图。这个属性放置我们按钮方法下面,而我们添加其他属性是我们界面的主视图。...从其alpha的当前值开始动画,这样即使动画被打断了,它也不会跳回开始动画初始值。

44410

如何通俗理解面向对象编程

除此之外,我们许多人最终都会在没有意识到情况下使用和对象。例如,当你使用任何scikit-learn模型时,实际上是使用一个。...我们从来没有调用过__init__方法,那么为什么对象获得这些属性?这里答案是,只要我们创建对象,它就会运行。...另外,我们不使用super函数设置mobile_uid和内存。 **super().__init__(memory,user_id)**是什么现实生活,你初始函数不是这些漂亮两行函数。...你将需要在定义许多变量/属性,并且复制并粘贴子类(这里是iphone1)很麻烦。因此存在super().。这里super()....你还可以使用私有函数myphone._privatefunc()。如果要避免这种情况,可以变量名前面使用双下划线。例如,调用print(myphone.__memory)下面抛出一个错误。

1.2K20

关于OC代理问题:self.delegate = self

背景 最近作者进行工程代码分析时,经常看到这样代码: self.delegate = self //自己代理设置为自己 于是心中产生了不少疑问,为什么这样写?这样写是否是正确?...self.delegate = self 这种做法笔者并不推荐,因为它可能带来一些安全隐患(特别是依赖第三方库非常多项目中) 问题 项目中我们经常会用到 UITextField 或者其子类,有时候为了图其方便会把...keyboardInputChangedSelection:obj]; }} 此时,细心读者可能产生一个疑惑,如果如上所述,那么上文提到新建工程(SGLimitedTextField ,...可以肯定是,没有任何方法调剂情况下,即 “self.delegate == self”,是不会出现死循环问题。...没有考虑清楚,避免使用 self.delegate = self。 2. 破除死循环,解决上述问题,只需停止消息转发即可。

1.4K20

面经之《招聘一个靠谱iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

如果是 @synthesize foo; 还会生成一个名称为foo成员变量,也就是说: 如果没有指定成员变量名称自动生成一个属性同名成员变量, 如果是 @synthesize foo = _foo...objc向一个对象发送消息时,runtime库根据对象isa指针找到该对象实际所属,然后该类方法列表以及其父方法列表寻找方法运行,如果最顶层依然找不到相应方法时,程序在运行时会挂掉并抛出异常...当使用 self 调用方法时,从当前方法列表开始找,如果没有,就从父再找;而当使用 super 时,则从父方法列表开始找。然后调用父这个方法。...这也就是为什么说“不推荐 init 方法中使用点语法”,如果想访问实例变量 iVar 应该使用下划线( _iVar ),而非点语法( self.iVar )。...苹果是如何实现autoreleasepool使用block时什么情况会发生引用循环,如何解决? block内如何修改block外部变量

980100

教程 | 无需反向传播深度学习:DeepMind合成梯度

合成梯度生成器不过是一个训练良好神经网络,该网络可以得到某一层输出并预测可能发生在该层梯度。...=0.1): self.weights -= self.input.T.dot(self.weight_output_delta) * alpha 在这个 Layer ,我们有几个变量...如果你把它与之前脚本进行比较,几乎是一模一样。只是更换了调用神经网络版本。 所以,我们所做是将先前神经网络脚本代码中分成不同函数。下面,我们实际中看看这个层。 ?...我们有了一些新变量。...不知道 hood 那发生什么事,但是当它收敛时,肯定很快。 通常会在 iamtrask 上发布新完成 blogpost。如果你有兴趣阅读,欢迎关注并给予反馈! ?

1.2K100

python基础六

注意:我们导入模块时,现在本地文件查找该模块,再去系统变量查找也就是说如果我们将本地py文件命名修改成上篇文章任意一个,再去使用它就会报错。 如果想要调用TestGetstr方法呢?...self: self变量,可以看作包含所有属性字典 *args:参数 实例化参数会在__init__接收 是抽象,他只负责定义一些属性和功能,经过实例化之后变成对象。...反过来 import 一个模块过程就是一个实例化过程 另:是可以当作一个属性传入到另一个。 面向对象之封装,继承,多态 继承:#为什么继承?...('18') s = Son() s.GetName() 就会输出: 是FatherGetName方法 是SonGetName方法 当一个多继承时候python3遵循广度优先原则,...对于面向对象封装来说,其实就是使用构造方法将内容封装到 对象 ,然后通过对象直接或者self间接获取被封装内容。

60030

老司机带你走进Core Animation 之粒子发射、TileLayer与异步绘制

什么他们放到最后讲呢,因为他们使用率不高,至少app方面上。...); } 这个就是上面demo重写view。...我们知道实际上CALayer和UIView都不是线程安全,所以UI操作我们一定要写在主线程(虽然后来苹果也修改了一部分属性使其成为线程安全,但是苹果仍不建议子线程操作UI,因为你无法预知会发生什么...以下代码是参照YYTextAsyncLayer改代码,因为YY大神代码完备性,所以我也没有什么改善余地,只是将个人认为不需要冗余去除,进行了微乎其微改动,所以这里申明代码不是个人代码啊。。...我们知道block引入变量时候会将外界变量copy于栈,这样即使外界变量发生改变,block变量也不会发生改变。(当然只有基本类型数据传入是值,对象都是传指针

91820

一个没有对手英雄是什么体验?如何在你Python游戏中添加反派

本系列几篇文章(请参阅第1部分,第2部分,第3部分和第4部分),您学习了如何使用Pygame和Python尚未出现空白游戏世界构建可玩角色。但是,没有恶人可打的英雄岂不是很难受?...如果没有敌人,这将是一个非常无聊游戏,因此本文中,您将为游戏添加一个敌人并加入用于构建关卡框架。...你可能想跟踪玩家血条情况,因此碰撞检查发生在Player而不是Enemy如果需要,你也可以跟踪敌人血条。逻辑和代码几乎相同,但是到目前为止,我们只跟踪玩家血条。...敌人子画面无法计数,因此你必须创建一个变量来跟踪敌人移动了多少步伐,并根据计数变量值对敌人进行编程以使其向右或向左移动. 首先,Enemy创建计数器变量。...() 启动你游戏,看看当你击中敌人时会发生什么

1.7K40

Python笔记:单例实现方法

另一种简单粗暴方法是如果确定这一变量必然为某个操作对象时,我们可以将其定义为该类变量,利用变量先天唯一性实现全局操作。...__new__ 本身__init__ 其中,前三步发生申明过程,后三步每一次实例化过程中都会执行一次。...下面就是一些目前不太理解问题: python申明过程是通过什么机制进行变量实例化和方法申明,这个过程叫做什么? 元定义是什么?...为什么要有元存在,它能够实现什么特别的方法? 如果有朋友对这部分内容有足够了解。欢迎进行补充讲解。 2....metaclass__call__()函数方式几乎一模一样,但是其区别在于,重载__new__()函数情况下实例化过程依然走完完整地实例化流程。

47930

Python3 错误和异常

(不能被0整除异常),NameError( 变量未声明异常) 和 TypeError(类型异常),这些异常类型能提示开发人员发生什么异常,这样就可以分析错误发生在何处。...try语句按照如下方式工作; 首先,执行try子句(关键字try和关键字except之间语句) 如果没有异常发生忽略except子句,try子句执行后就结束。...如果需要捕捉特定异常,可以except声明异常类型,那么这个陷阱就只能捕获你所声明异常类型,但是可以末尾写上一个通用异常陷阱,没有被特定陷阱所捕获异常最后就会被通用异常陷阱所捕获。...如果except声明了一个异常类型,可以通过as关键字赋值给一个变量,通过这个变量可以打印出错误信息,代码示例: try:     num = 10 / 0     print(num) except...也可以使用此关键字代码抛出特定异常,如果这个关键字写在except里,并且没有指定要抛出异常,那么这个raise 就会抛出这个陷阱里异常,代码示例: try:     num=10/0 except

91610

详解Python与对象(上)

前言 面试官:什么? 你:这个人很实在,不知道什么叫累。 面试官:恭喜你,你被录取了。...对象:集合一个事物,这里对应由 class 生成某一个 实例(object)。 我们首先来举个简单例子,动物是,那狗、猫就是动物这个两个实例。 属性:类似于变量,用来存储数据。...初体验 看完了基本概念,如果你还一知半解的话,没有关系,我们从Python我们最常用int类型出发,对面向对象来一个初体验。...(3)call函数参数也为self,是为了使用自身属性。调用时候是使用对象.方法,当然也可以用.方法(对象)。 例如,arr.sum(),np.sum( arr )是一样效果。...,如果改变变量,对象变量都会发生变化,如果改变是对象变量,则变量发生改变。

29020

iOS KVC和KVO

KVO实现原理 KVO相关: 1\. iOS用什么方式来实现对一个对象KVO?(KVO本质是什么?) 2\. 如何手动出发KVO? 3\. 直接修改成员变量触发KVO么?...[self.person2 setAge:20];///> 等同于self.person2.age = 20; } 因为当我们DLPerson中使用@property声名一个属性时候自动生成声名属性...当我们DLperson实例对象调用setAge方法时, 实例对象isa指针找到对象,然后对象寻找相应对象方法,如果有则调用, 如果没有则去superclass指向对象寻找相应对象方法...手动调用willChangeValueForKey:和didChangeValueForKey: 直接修改成员变量触发KVO么? 不会触发KVO,因为直接修改成员变量没有走set方法。...KVC相关: 通过KVC修改属性触发KVO么? 触发KVO,如上流程图 KVC赋值和取值过程是怎样?原理是什么? 如上流程图 KVC可以修改私有属性和私有成员变量吗?

81630

python异常处理、自定义异常、断言原理与用法分析

分享给大家供大家参考,具体如下: 什么是异常: 当程序遭遇某些非正常问题时候就会抛出异常:比如int()只能处理能转化成int对象,如果传入一个不能转化对象就会报错并抛出异常 ?...常用异常有: ValueError :传入无效错误参数 ? TypeError:进行了对类型无效操作 ? IndexError:序列没有此索引 ? NameError:使用未定义变量 ?...") finally: print("这里是即使发生异常也执行代码") """第一次运行结果: 请输入要int字符串:123 这里是当没有发生异常时操作 这里是即使发生异常也执行代码...可以一条except里捕获多个异常,但需要用括号包裹多个异常,并且即使同时捕获多个异常,由于异常会导致程序发生终止,所以只会捕获到一个异常,所以只需要一个获取异常返回对象变量: ?...如果不确定捕获什么异常,可以使用异常Exception【更高级可以使用BaseException】,并且最好把Exception放在所有except最后: ?

51961

初识Python面向对象

相比较函数,面向对象 是 更大 封装,根据 职责 一个对象 封装 多个方法 完成某一个需求,首先确定 职责 —— 要做事情(方法) 根据 职责 确定不同 对象, 对象 内部封装不同...,而对象可以有很多个 不同对象 之间 属性 可能各不相同 定义了什么 属性和方法,对象 中就有什么属性和方法,不可能多,也不可能少 设计 使用面相对象开发,应该首先分析需求,确定一下...图片 程序开发,要设计一个,通常需要满足一下三个要素: 名 这类事物名字,满足大驼峰命名法 属性 这类事物具有什么特征 方法 这类事物具有什么行为 大驼峰命名法 CapWords 每一个单词首字母大写...(动词),通常可以定义成 方法(用去定义对象所具备可操作能力叫做方法) 提示:需求没有涉及属性或者方法设计时,不需要考虑 练习 1 需求 小明 今年 18 岁,身高 1.75,每天早上...结构从大方向来说就分为两部分: 静态变量 动态方法 从角度研究 名操作静态属性 查看所有内容:名.dict方式。

17730

Python面向对象

⼀直使⽤是经典. 经典如果什么都不写. ⼀个叫新式. python2.2之后出现了新式. 新式特点是基根是object。...python3x版本只有一种: python3使⽤都是新式. 如果谁都不继承. 那这个默认继承 object。...这个python其实是很不容易说明⽩. 因为我们⼀直⽤. 只是没有具体说. 比如. 我们创建⼀个变量a = 10 , 我们知道此时a是整数类型....这是我们都知道. 但是, 要告诉你是. 这个就是多态性. 同⼀个变量a可以是多种形态。 对约束 提取⽗. 然后定义好⽅法. 在这个⽅法什么都不⽤⼲....参数随意,没有self”和“cls”参数,但是方法体不能使用或实例任何属性和方法; 调用:实例对象和对象都可以调用。 静态方法是函数,不需要实例化。

49121

笨办法学 Python · 续 练习 34:分析器

那么你分析器就仅仅是一个引擎,它遍历解析树,调用每个产生式analyze()方法。使用这种风格,你将需要一些状态,它们传递给每个语法产生式,这个应该是第三个。...这一切都取决于,你想让错误发生在哪里,以及哪里可以做最有用分析。如果你将工作放在解析器,那么你可以马上给出格式化方面的早期错误。...你在这个练习任务是,接受你语法产生式(可能与我不同)并进行分析。 随意借鉴出发点。如果需要,可以使用分析器和我世界,但是你应该尝试首先编写自己分析器。...这是棘手,因为 Python 这样语言,解释器阶段中进行更多错误检查。你应该决定在分析过程,可能出现哪些错误并实现它们。例如,如果尝试使用未定义变量,会发生什么?...其他语言表达式拥有值,语句没有,因此把它们赋给变量失败。Python 是哪种语言?

48020
领券