鱼C论坛

 找回密码
 立即注册
查看: 977|回复: 5

[已解决]关于self的问题

[复制链接]
发表于 2018-4-7 09:27:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. class Nstr:
  2.     def __init__(self, arg=' '):
  3.         self = ord(arg)
  4.         print(self)#检测
  5.         print(type(self))#检测

  6.     def __add__(self, other):
  7.         print(self)#检测
  8.         print(type(self))#检测
  9.         return int.__add__(self) + int(other)
复制代码

输出结果
  1. >>> b = Nstr('b'); a = Nstr('a'); a + b
  2. 98
  3. <class 'int'>
  4. 97
  5. <class 'int'>
  6. <__main__.Nstr object at 0x000001EAA1625C88>
  7. <class '__main__.Nstr'>
  8. Traceback (most recent call last):
  9.   File "<pyshell#31>", line 1, in <module>
  10.     b = Nstr('b'); a = Nstr('a'); a + b
  11.   File "C:\Users\Jason\Desktop\test03.py", line 10, in __add__
  12.     return int.__add__(self) + int(other)
  13. TypeError: descriptor '__add__' requires a 'int' object but received a 'Nstr'
复制代码


请问一下啊
self不是全局变量吗,我修改了self的类型后为什么后来它的类型又变回去了?
最佳答案
2018-4-7 12:50:54
Java:
class Demo{
    int value;
    public Demo(int value){
        this.value = value;    // 虽然在Java的方法签名中没有显式写出this,但是JVM把实例对象this传进去
    }
}

Python:
class Demo(object):
    def __init__(self, value):
        self.value = value    # Python就比较直接,在初始化方法的参数中传进self参数,用来标记该类的实例对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-7 09:32:46 | 显示全部楼层
Python的self,相当于Java的this——这你就全明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-7 09:36:33 | 显示全部楼层
ABC23 发表于 2018-4-7 09:32
Python的self,相当于Java的this——这你就全明白了。

Java还没学
能不能简单的帮我讲一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-7 09:46:37 | 显示全部楼层
ABC23 发表于 2018-4-7 09:32
Python的self,相当于Java的this——这你就全明白了。

相当于C++的this指针吗?
C++学过一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 12:50:54 | 显示全部楼层    本楼为最佳答案   
Java:
class Demo{
    int value;
    public Demo(int value){
        this.value = value;    // 虽然在Java的方法签名中没有显式写出this,但是JVM把实例对象this传进去
    }
}

Python:
class Demo(object):
    def __init__(self, value):
        self.value = value    # Python就比较直接,在初始化方法的参数中传进self参数,用来标记该类的实例对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 14:17:15 From FishC Mobile | 显示全部楼层
self是相当于c++中的this指针
但是它们都不是这样用的,你应该用
self.value的形式,而不是直接用self
对应c++中为this->value

评分

参与人数 1荣誉 +5 收起 理由
苏丛 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表