鱼C论坛

 找回密码
 立即注册
查看: 2487|回复: 7

[已解决]self的用法

[复制链接]
回帖奖励 6 鱼币 回复本帖可获得 2 鱼币奖励! 每人限 1 次
发表于 2022-9-22 23:49:35 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 风船野 于 2022-9-23 11:31 编辑

python类中的self表示了什么?
下面这段代码中在isLeftChild方法中的 == self判断时,self代表的是什么?
replaceNodeData方法中的=self赋值时self又代表什么?

  1. class TreeNode:
  2.     def __init__(self, key, val, left=None, right=None, parent=None):
  3.         self.key = key
  4.         self.payload = val
  5.         self.leftChild = left
  6.         self.rightChild = right
  7.         self.parent = parent

  8.     def hasLeftChild(self):
  9.         return self.leftChild

  10.     def hasRightChild(self):
  11.         return self.rightChild

  12.     def isLeftChild(self):
  13.         return self.parent and self.parent.leftChild == self

  14.     def isRightChild(self):
  15.         return self.parent and self.parent.rightChild == self

  16.     def isRoot(self):
  17.         return not self.parent

  18.     def isLeft(self):
  19.         return not (self.rightChild or self.leftChild)

  20.     def hasAnyChild(self):
  21.         return self.rightChild or self.leftChild

  22.     def hasBothChild(self):
  23.         return self.rightChild and self.rightChild

  24.     def replaceNodeData(self, key, value, lc, rc):
  25.         self.key = key
  26.         self.payloda = value
  27.         self.leftChild = lc
  28.         self.rightChild = rc
  29.         if self.hasLeftChild():
  30.             self.leftChild.parent = self
  31.         if self.hasRightChild():
  32.             self.rightChild.parent = self
复制代码

代码出处:
B站数据结构与算法python版  二叉查找树操作:
https://www.bilibili.com/video/BV1VC4y1x7uv/?p=68
最佳答案
2022-9-23 07:02:32

Python 中的 self 表示实例本身,即当你定义一个 A 类,对 A 类进行初始化赋值,例如 a = A()

此时 self 就表示 a 这个实例对象本身,而你代码 replaceNodeData 函数方法中的左右子孩子节点,是将 self 设置为父节点,即此时的实例对象设置为左右孩子节点的父节点


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

使用道具 举报

发表于 2022-9-23 00:04:35 | 显示全部楼层

回帖奖励 +2 鱼币

self就像他的翻译,代表的是自身,当你实例化对象后,对象内的self就指的是实例化对象自身。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-23 00:12:45 | 显示全部楼层

回帖奖励 +2 鱼币

本帖最后由 jackz007 于 2022-9-23 00:23 编辑

        self 只能在定义对象的方法中可见,而且,一定是隐含存在的第一个参数。self 就是对象自身,例如,a = 8,对象 a 的 self 就是 8,a = 'ABC',对象 a 的 self 就是 'ABC',a = ['A' , 'B' , 'C'] 那么,对象 a 的 self 就是 ['A' , 'B' , 'C'],你可以新建继承自 int、str、list 的类,然后,编写新的方法,把 self 打印出来看看就知道了。
        对于其它对象
  1. class A():
  2.     def foo(self):
  3.         pass

  4. a = A()
  5. a . foo()
复制代码

        调用 a . foo() 时,传入 foo() 中的 self 就是对象 a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-23 06:49:23 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2022-9-23 07:02:32 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币


Python 中的 self 表示实例本身,即当你定义一个 A 类,对 A 类进行初始化赋值,例如 a = A()

此时 self 就表示 a 这个实例对象本身,而你代码 replaceNodeData 函数方法中的左右子孩子节点,是将 self 设置为父节点,即此时的实例对象设置为左右孩子节点的父节点


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

使用道具 举报

发表于 2022-9-23 08:05:31 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2022-9-23 11:44:10 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

发表于 2022-9-23 18:35:20 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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